首页 > 解决方案 > Python根据条件将列表转换为嵌套列表

问题描述

我有一个清单

data = [1, 2, 3, 0, 0, 4, 5, 0, 0, 0, 4, 6, 7, 0]

预期产出

result = [[1,2,3], [4,5], [4,6,7]]

当出现零时拆分列表;将所有非零数字添加到新列表中,直到下一个零

这是我尝试过的:

res = []
tmp = []
for i in data:
  if i == 0 and len(tmp) > 0:
    res.append(tmp)
    tmp = []
  elif i != 0:
    tmp.append(i)

我想知道是否有一种pythonic方式来做同样的事情......

标签: python-3.xlist

解决方案


您可以使用itertools.groupby

from itertools import groupby

data = [1, 2, 3, 0, 0, 4, 5, 0, 0, 0, 4, 6, 7, 0]

result = [list(g) for k, g in groupby(data, key=bool) if k]
# [[1, 2, 3], [4, 5], [4, 6, 7]]

bool分组键函数使用映射0到 False 和所有其他ints到的事实True。你可以更明确地使用

key=lambda n: n != 0


推荐阅读