蟒蛇在某些字符串分割成列表子列表
我有一个列表的列表:蟒蛇在某些字符串分割成列表子列表
[['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']]
感谢,
可以使用.index()
方法在列表中找到['****']
。但要小心,如果元素未找到,它会抛出一个ValueException
,因此您必须使用try
和except
块来捕获它。
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
如果有多个'****'怎么办? –
你是什么意思?举一个例子。 – MarkWeston
他说如果模式是['**']或['********']而不是['****'] – Vaibhav
要分割当元件是[ '****']:
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)
谢谢。优雅! –
可以使用此作为参考鉴于[ '****']是唯一图案
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:])
这个功能在将列表拆分成一半时有效,但如果有多个'['****']'那么它就不会。 –
我正要写这个 – Vaibhav
随着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']]
是对图案[ '****']是恒定的或可变?? – Vaibhav