使用python将此列表拆分或分隔到存在空列表“[]”的位置

2024-06-12 15:05:42 发布

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

我想在有空列表的地方拆分或分隔此列表[]

样本列表:

lists = [['I'], ['speak'], ['english'], [], ['I'], ['speak'], ['spanish'], [], ['I'], ['speak'], ['Hindu']]

期望输出:

lists = [
[['I'], ['speak'],['english']],
[['I'], ['speak'],['spanish']],
[['I'], ['speak'],['Hindu']],
]

我如何做到这一点

我试过:

new_list = []
for I in range(len(lists)):
    temp_list = []
    if lists[i] != []:
        temp_list.append(lists [i])
    new_list.append(temp_list)

Tags: in列表newforenglish地方rangetemp
3条回答

您可以使用^{}实现以下目的:

from itertools import groupby
my_list = [['I'], ['speak'], ['english'], [], ['I'], ['speak'], ['spanish'], [], ['I'], ['speak'], ['Hindu']]

new_list = [list(l) for i, l in groupby(my_list, bool) if i]

其中new_list包含:

[
    [['I'], ['speak'], ['english']], 
    [['I'], ['speak'], ['spanish']], 
    [['I'], ['speak'], ['Hindu']]
]
new_list = [[]]
for item in lists:
    if item:
       new_list[-1].append(item[0])
    else:
        new_list.append([])

结果:

[['I', 'speak', 'english'], ['I', 'speak', 'spanish'], ['I', 'speak', 'Hindu']]

如您所见,解决问题的方法是this,您可以使用一种方法,该方法包括:

使用列表理解+zip()+切片+枚举()

首先按特定值将列表拆分为多个列表

size = len(test_list) 
idx_list = [idx + 1 for idx, val in
            enumerate(test_list) if val == 5]

然后创建一个新的

res = [test_list[i: j] for i, j in
        zip([0] + idx_list, idx_list + 
        ([size] if idx_list[-1] != size else []))] 

相关问题 更多 >