为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

aluckdog 2023-02-22 17:12:51
我想读取一个列表,然后从该列表中选择连续的特定项目以将它们存储在 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]]
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

您可以使用itertools.groupby


import itertools as it


result = [list(g) for k, g in it.groupby(lst) if k == 0]


查看完整回答
反对 回复 2023-02-22
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

只要您只对连续的零感兴趣,这里就有一个解决方案。这个想法是利用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]]


查看完整回答
反对 回复 2023-02-22
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

使用变量检查每次迭代中flag的状态。list


nw_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 = []


查看完整回答
反对 回复 2023-02-22
  • 3 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信