python-3.x - 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方式来做同样的事情......
解决方案
您可以使用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
推荐阅读
- javascript - 我们如何在函数调用之外访问传递给选择标签(专业)下的函数的值
- angular - 在角度表中填充数组数组的长度
- regex - 在正则表达式中使用匹配组的长度
- c++ - 如何传递大小是用户定义的二维数组
- java - 部分消息收不到
- css - 在加载和呈现初始 html 和主 css 文件后加载其他样式表
- reactjs - 带有 Ag-grid 的 React.js:如何在 AgGridReact 组件中禁用拖动?
- python - 改善非常慢的 python 代码的执行时间
- python - 如何制作修复href链接的功能?
- javascript - 有没有办法在链接上旋转悬停突出显示?(不是元素)