基于嵌套列表的第一个元素合并嵌套列表

2024-04-25 14:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含一些数据的大列表

[['', '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']]

Tags: 数据方法元素列表
3条回答

这里有一个答案:

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', '']]

这样做有效:

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]

你可以试试

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)

每当在data中发现具有第一个元素''的子列表时,空列表就会附加到要输出的列表(在本例中为new_list

新元素被添加到当前值new_list的最后一个子列表中

输出为:

[['', 'A', 'B', 'C', '', 'D', 'E', 'F', ''], ['', 'H', 'I', 'J', 'K', '', 'L', 'M', 'N']]

相关问题 更多 >