2017-09-26 111 views
-1

我有一个列表的列表:蟒蛇在某些字符串分割成列表子列表

[['H', '0'], ['S', '3', '1.00'], 
['33.8650000', '0.0254938'], 
['5.0947900', '0.1903730'], 
['1.1587900', '0.8521610'], 
['S', '1', '1.00'], 
['0.3258400', '1.0000000'], 
['S', '1', '1.00'], 
['0.1027410', '1.0000000'], 
['****'], 
['He', '0'], ['S', '3', '1.00'], 
['98.1243000', '0.0287452'], 
['14.7689000', '0.2080610'], 
['3.3188300', '0.8376350'], 
['S', '1', '1.00'], 
['0.8740470', '1.0000000'], 
['S', '1', '1.00'], 
['0.2445640', '1.0000000'], 
['****']] 

我想在这里点列表元素是****整个列表到子列表拆分。

所以输出应该是这样的:

[['H', '0'], ['S', '3', '1.00'], 
['33.8650000', '0.0254938'], 
['5.0947900', '0.1903730'], 
['1.1587900', '0.8521610'], 
['S', '1', '1.00'], 
['0.3258400', '1.0000000'], 
['S', '1', '1.00'], 
['0.1027410', '1.0000000'], 
# the ['****'] was here! 
] 

[['He', '0'], ['S', '3', '1.00'], 
['98.1243000', '0.0287452'], 
['14.7689000', '0.2080610'], 
['3.3188300', '0.8376350'], 
['S', '1', '1.00'], 
['0.8740470', '1.0000000'], 
['S', '1', '1.00'], 
['0.2445640', '1.0000000']] 

感谢,

+0

是对图案[ '****']是恒定的或可变?? – Vaibhav

回答

2

可以使用.index()方法在列表中找到['****']。但要小心,如果元素未找到,它会抛出一个ValueException,因此您必须使用tryexcept块来捕获它。

lsts = [['H', '0'], ['S', '3', '1.00'], ['33.8650000', '0.0254938'], ['5.0947900', '0.1903730'], ['1.1587900', '0.8521610'], ['S', '1', '1.00'], ['0.3258400', '1.0000000'], ['S', '1', '1.00'], ['0.1027410', '1.0000000'], ['****'], ['He', '0'], ['S', '3', '1.00'], ['98.1243000', '0.0287452'], ['14.7689000', '0.2080610'], ['3.3188300', '0.8376350'], ['S', '1', '1.00'], ['0.8740470', '1.0000000'], ['S', '1', '1.00'], ['0.2445640', '1.0000000'], ['****']] 
split_lsts = [] 
while True: 
    try: 
     index = lsts.index(['****']) 
     split_lsts.append(lsts[:index]) 
     lsts = lsts[index+1:] 
    except ValueError: 
     break 
+0

如果有多个'****'怎么办? –

+0

你是什么意思?举一个例子。 – MarkWeston

+0

他说如果模式是['**']或['********']而不是['****'] – Vaibhav

0

要分割当元件是[ '****']:

a = [['H', '0'], ['S', '3', '1.00'], ['33.8650000', '0.0254938'], ['5.0947900', '0.1903730'], ['1.1587900', '0.8521610'], ['S', '1', '1.00'], ['0.3258400', '1.0000000'], ['S', '1', '1.00'], ['0.1027410', '1.0000000'], ['****'], ['He', '0'], ['S', '3', '1.00'], ['98.1243000', '0.0287452'], ['14.7689000', '0.2080610'], ['3.3188300', '0.8376350'], ['S', '1', '1.00'], ['0.8740470', '1.0000000'], ['S', '1', '1.00'], ['0.2445640', '1.0000000'], ['****']] 
new_list=[] 
for el in a: 
    if el == ['****']: 
     print new_list 
     new_list = [] 
     continue 
    else: 
     new_list.append(el) 
+0

谢谢。优雅! –

0

可以使用此作为参考鉴于[ '****']是唯一图案

a = [['H', '0'], ['S', '3', '1.00'], 
['33.8650000', '0.0254938'], 
['5.0947900', '0.1903730'], 
['1.1587900', '0.8521610'], 
['S', '1', '1.00'], 
['0.3258400', '1.0000000'], 
['S', '1', '1.00'], 
['0.1027410', '1.0000000'], 
['****'], 
['He', '0'], ['S', '3', '1.00'], 
['98.1243000', '0.0287452'], 
['14.7689000', '0.2080610'], 
['3.3188300', '0.8376350'], 
['S', '1', '1.00'], 
['0.8740470', '1.0000000'], 
['S', '1', '1.00'], 
['0.2445640', '1.0000000'], 
['****']] 

    mid = a.index(['****']) 
    print(a[:mid]) 
    print(a[mid+1:]) 
+1

这个功能在将列表拆分成一半时有效,但如果有多个'['****']'那么它就不会。 –

+0

我正要写这个 – Vaibhav

0

随着itertools.takewhile功能:

import itertools 

result = [] 
idx = 0 
while idx < len(lst): # lst is your initial list of sublists 
    result.append(list(itertools.takewhile(lambda l: l[0] != '****', lst if not result else lst[idx:]))) 
    idx += len(lst) if not result[0] else len(result[-1]) + 1 

对外输出所得子列表:

for sub_l in result: 
    print(sub_l) 

输出:

[['H', '0'], ['S', '3', '1.00'], ['33.8650000', '0.0254938'], ['5.0947900', '0.1903730'], ['1.1587900', '0.8521610'], ['S', '1', '1.00'], ['0.3258400', '1.0000000'], ['S', '1', '1.00'], ['0.1027410', '1.0000000']] 
[['He', '0'], ['S', '3', '1.00'], ['98.1243000', '0.0287452'], ['14.7689000', '0.2080610'], ['3.3188300', '0.8376350'], ['S', '1', '1.00'], ['0.8740470', '1.0000000'], ['S', '1', '1.00'], ['0.2445640', '1.0000000']]