将列表中特定项目的连续重复项打包到列表列表中

我想读取一个列表,然后从该列表中选择连续的特定项目以将它们存储在 New_list 中。继续阅读列表,然后再次从该列表中选择该特定项目并将它们作为另一个列表存储在该 New_list 中。让我们举个例子:


nw_lst = []    

lst = [1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1]    

for i in range(0, len(lst), 1):    

    if lst[i] == 0:

        nw_lst.append(lst[i])

print nw_lst

我得到的输出是:


[0, 0, 0, 0, 0, 0, 0]


我想得到:


[[0, 0, 0], [0, 0], [0, 0]]


aluckdog
浏览 85回答 3
3回答

开心每一天1111

您可以使用itertools.groupby:import itertools as itresult = [list(g) for k, g in it.groupby(lst) if k == 0]

慕妹3242003

只要您只对连续的零感兴趣,这里就有一个解决方案。这个想法是利用split字符串的方法。您只需将列表转换为字符串,将其拆分为 1,然后返回列表。lst = [1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1]lst_str = "".join([str(x) for x in lst])lst_str_zeros = lst_str.split("1")new_lst = [[int(y) for y in x] for x in lst_zeros if x!=""]print(new_lst)[[0, 0, 0], [0, 0], [0, 0]]

梦里花落0921

使用变量检查每次迭代中flag的状态。listnw_lst = []tmp = []flag = 0 lst = [1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1] for i in lst:    if i == 0:        if flag == 0:            tmp.append(i)            flag = 1        else:            tmp.append(i)    else :        flag = 0    if flag == 0 and len(tmp):        nw_lst.append(tmp)        tmp = []
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python