我有很多包含一些数据的列表。
[['', 'A', 'B'],['C', '', 'D'],['E', 'F', ''],['', 'H', 'I'],['J', 'K', ''],['L', 'M', 'N']]
这些列表中表示的数据已连接。当嵌套列表的第一个元素为''
时,我可以肯定地知道,此后的每个列表都应与以''
元素开头的列表分开。每个列表,直到下一个列表的第一个元素为''
为止。然后循环重复。任何列表中的任何元素都可以包含''
。只有当第一个元素为''
时,循环才会重复。
我希望从上面的列表列表中找到一种创建新列表列表的快速方法,从而在下面产生预期的结果。
[['', 'A', 'B', 'C', '', 'D', 'E', 'F', ''],['', 'H', 'I', 'J', 'K', '', 'L', 'M', 'N']]
答案 0 :(得分:1)
这有效:
a = [['', 'A', 'B'],['C', '', 'D'],['E', 'F', ''],['', 'H', 'I'],['J', 'K', ''],['L', 'M', 'N']]
final = []
for i in a:
if i[0] == "":
final.append([])
final[-1].extend(i)
print(final)
输出
[['', 'A', 'B', 'C', '', 'D', 'E', 'F', ''], ['', 'H', 'I', 'J', 'K', '', 'L', 'M', 'N']]
[Finished in 0.7s]
答案 1 :(得分:1)
这里是一个答案:
lst = [['', 'A', 'B'],['C', '', 'D'],['E', 'F', ''],['', 'H', 'I'],['J', 'K', ''],['L', 'M', 'N']]
result = []
temp = []
for l in lst:
if len(l[0]) == 0 and len(temp) == 0:
temp.extend(l)
elif len(temp) != 0:
temp.extend(l)
if len(l[-1]) == 0:
result.append(temp)
temp = []
result
输出:
[['', 'A', 'B', 'C', '', 'D', 'E', 'F', ''], ['', 'H', 'I', 'J', 'K', '']]
答案 2 :(得分:1)
您可以尝试类似
data=[['', 'A', 'B'],['C', '', 'D'],['E', 'F', ''],['', 'H', 'I'],['J', 'K', ''],['L', 'M', 'N']]
new_list = []
for l in data:
if l and l[0]=='':
new_list.append([])
new_list[-1].extend(l)
else:
new_list[-1].extend(l)
print(new_list)
每当在new_list
中找到具有第一个元素''
的子列表时,便会将一个空列表附加到要输出的列表中(本例中为data
)。
将新元素添加到new_list
当前值的最后一个子列表中。
输出为:
[['', 'A', 'B', 'C', '', 'D', 'E', 'F', ''], ['', 'H', 'I', 'J', 'K', '', 'L', 'M', 'N']]
答案 3 :(得分:1)
您可以分两个阶段进行操作,首先找到以''
开头的索引,然后遍历这些索引并创建子列表:
from itertools import chain, zip_longest
lst = [['', 'A', 'B'], ['C', '', 'D'], ['E', 'F', ''], ['', 'H', 'I'], ['J', 'K', ''], ['L', 'M', 'N']]
# find the indices
starts = [i for i, e in enumerate(lst) if e[0] == '']
# iterate over the indices in pairs (current, next)
result = [list(chain.from_iterable(lst[start:end])) for start, end in zip_longest(starts, starts[1:], fillvalue=len(lst))]
print(result)
输出
[['', 'A', 'B', 'C', '', 'D', 'E', 'F', ''], ['', 'H', 'I', 'J', 'K', '', 'L', 'M', 'N']]