gpt4 book ai didi

python - 根据从子列表中获取的值创建新列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:28 24 4
gpt4 key购买 nike

我有一个由给定数量的子列表组成的列表。我需要根据存储在第一个列表中的值拒绝所有子列表中的项目来创建一个新的(较小的)列表。这就是我的意思的 MWE:

a = [[0,0,0,1,1,1,2,2,2], [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9],
[0.21,0.22,0.23,0.24,0.25,0.26,0.27,0.28,0.29]]

b = [[] for _ in range(len(a))]
for indx, item in enumerate(a[0]):
if item == 2:
b[0].append(a[0][indx])
b[1].append(a[1][indx])
b[2].append(a[2][indx])

结果是:

[[2, 2, 2], [0.7, 0.8, 0.9], [0.27, 0.28, 0.29]]

这行得通,但我正在寻找一种更像 Python 的方式来创建我的 b 列表。

最佳答案

使用zip()将列表组合成列,过滤列,然后再次使用 zip() 转置回行:

b = zip(*(col for col in zip(*a) if col[0] == 2))

演示:

>>> a = [[0,0,0,1,1,1,2,2,2], [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9],
... [0.21,0.22,0.23,0.24,0.25,0.26,0.27,0.28,0.29]]
>>> zip(*(col for col in zip(*a) if col[0] == 2))
[(2, 2, 2), (0.7, 0.8, 0.9), (0.27, 0.28, 0.29)]

这将创建一个元组列表。如果您绝对需要列表,请映射到列表:

b = map(list, zip(*(col for col in zip(*a) if col[0] == 2)))

或者,在 Python 3 中,使用列表理解:

b = [list(t) for t in zip(*(col for col in zip(*a) if col[0] == 2))]

关于python - 根据从子列表中获取的值创建新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19708625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com