有没有更简洁和省时的方法来zip
在 Python 中实现以下操作?我将列表列表配对以创建新列表,如下所示:
>>> a
[[1, 2, 3], [4, 5, 6]]
>>> b
[[10, 11, 12], [13, 14, 15]]
>>> for x, y in zip(a, b):
... print zip(*[x, y])
...
[(1, 10), (2, 11), (3, 12)]
[(4, 13), (5, 14), (6, 15)]
谢谢。
有没有更简洁和省时的方法来zip
在 Python 中实现以下操作?我将列表列表配对以创建新列表,如下所示:
>>> a
[[1, 2, 3], [4, 5, 6]]
>>> b
[[10, 11, 12], [13, 14, 15]]
>>> for x, y in zip(a, b):
... print zip(*[x, y])
...
[(1, 10), (2, 11), (3, 12)]
[(4, 13), (5, 14), (6, 15)]
谢谢。
除了替换之外,我真的没有看到更好的方法:
print zip(*[x, y])
和:
print zip(x,y)
如果你真的在使用 2 个元素列表,你可能只是这样做:
print zip( a[0], b[0] )
print zip( a[1], b[1] )
(当你离开 1 个拉链时,它会稍微更有效率,但我不相信它会更清晰,这是你真正应该担心的)。
如果你真的很喜欢紧凑的代码,你可以使用map
:
map(zip,a,b) #[[(1, 10), (2, 11), (3, 12)], [(4, 13), (5, 14), (6, 15)]]
这可能再次比其他版本更有效,但我认为您在代码清晰度方面付出了一点代价(尽管其他人可能不同意)。
>>> [zip(i, j) for i, j in zip(a,b)]
[[(1, 10), (2, 11), (3, 12)], [(4, 13), (5, 14), (6, 15)]]
当然,这实际上与您在上面写的内容相同。
除了@mgilson 所说的,itertools.izip
如果您要压缩的列表很大,您还可以考虑使用。
由于izip
仅在请求时计算元素并且仅返回迭代器,因此内存使用量远低于zip
大型列表。
这也很好用:
print zip(sum(a,[]),sum(b,[]))
印刷:
[(1, 10), (2, 11), (3, 12), (4, 13), (5, 14), (6, 15)]
这可能是最好的性能,也很简洁:
from itertools import chain
print zip(chain(*a),chain(*b))
相同的输出