我在python中列出了多个list-of-lists:
a = [[[0,1,2], [10,11,12]],
[[3,4,5], [13,14,15]]]
我想将所有第一个列表合并在一起,第二个列表合并在一起,等等:
final = [[0,1,2,3,4,5],
[10,11,12,13,14,15]]
我得到的最远的是尝试解压缩外部列表:
zip(*a) = [([0,1,2], [3,4,5]),
([10,11,12], [13,14,15])]
我想人们可以循环使用这些,然后将每个链接在一起,但这看起来很浪费。什么是解决这个问题的pythonic方法?
注意: 每个“行”中可能有两个以上的子列表。
答案 0 :(得分:3)
zip()
和itertools.chain()
的组合可以做到:
In [1]: from itertools import chain
In [2]: [list(chain(*lists)) for lists in zip(*a)]
Out[2]: [[0, 1, 2, 3, 4, 5], [10, 11, 12, 13, 14, 15]]
答案 1 :(得分:1)
reduce
函数非常适合此类问题:
[reduce((lambda x,y: x[i]+y[i]), a) for i,_ in enumerate(a)]
结果:
[[0, 1, 2, 3, 4, 5], [10, 11, 12, 13, 14, 15]]
此代码为:对于每个索引i
,一起收集i
元素的所有a
项。