我正在尝试创建一个包含字符串列表的大列表。我迭代了字符串的输入列表,并创建了一个临时列表。输入:
['Mike','Angela','Bill','\n','Robert','Pam','\n',...]我想要的输出:
[['Mike','Angela','Bill'],['Robert','Pam']...]我得到的是:
[['Mike','Angela','Bill'],['Angela','Bill'],['Bill']...]代码:
for i in range(0,len(temp)):
temporary = []
while(temp[i] != '\n' and i<len(temp)-1):
temporary.append(temp[i])
i+=1
bigList.append(temporary)发布于 2017-11-27 10:21:19
修复你的代码,我建议直接迭代每个元素,附加到一个嵌套的列表中--
r = [[]]
for i in temp:
if i.strip():
r[-1].append(i)
else:
r.append([])请注意,如果temp以换行符结尾,r将有一个尾随的空[]列表。不过,你可以摆脱这一点:
if not r[-1]:
del r[-1]另一种选择是使用itertools.groupby,另一个回答者已经提到过。不过,您的方法性能更好。
发布于 2017-11-27 10:20:05
使用itertools.groupby
from itertools import groupby
names = ['Mike','Angela','Bill','\n','Robert','Pam']
[list(g) for k,g in groupby(names, lambda x:x=='\n') if not k]
#[['Mike', 'Angela', 'Bill'], ['Robert', 'Pam']]发布于 2017-11-27 10:40:12
您可以尝试:
a_list = ['Mike','Angela','Bill','\n','Robert','Pam','\n']
result = []
start = 0
end = 0
for indx, name in enumerate(a_list):
if name == '\n':
end = indx
sublist = a_list[start:end]
if sublist:
result.append(sublist)
start = indx + 1
>>> result
[['Mike', 'Angela', 'Bill'], ['Robert', 'Pam']]https://stackoverflow.com/questions/47503071
复制相似问题