连接和平面两个嵌套的python列表

时间:2016-10-16 22:51:36

标签: python list nested

我有两个形式

的向量
a = [[1,2,3],[1,2,3],[1,2,3]]

b = [[5,6,7],[5,6,7],[5,6,7]]

我希望输出为

c = [[1,2,3,5,6,7],[1,2,3,5,6,7],[1,2,3,5,6,7]]

我得到了这一行

c = [[a[i],b[i]] for i in range(len(a))]

但我的输出是

[[[1, 2, 3], [5, 6, 7]], [[1, 2, 3], [5, 6, 7]], [[1, 2, 3], [5, 6, 7]]

3 个答案:

答案 0 :(得分:3)

zip连接每个配对:

a = [[1,2,3],[1,2,3],[1,2,3]]

b = [[5,6,7],[5,6,7],[5,6,7]]

print([i + j for i,j in zip(a, b)])

哪会给你:

[[1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7]]

或使用您自己的逻辑:

[a[i] + b[i] for i in range(len(a))]

用+连接是关键。如果您要编制索引,我会使用enumerate

[ele + b[i] for i, ele in enumerate(a)]

答案 1 :(得分:2)

另一种方式:

>>> map(list.__add__, a, b)
[[1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7]]

或使用operator模块:

>>> map(operator.add, a, b)
[[1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7], [1, 2, 3, 5, 6, 7]]

答案 2 :(得分:-1)

这是使用itertools模块的解决方案:

from itertools import chain, starmap
c = map(list, list(starmap(chain, zip(a, b))))

感谢Padraic的评论。在这一点上它太嵌套了,我建议使用它。