我有两个嵌套列表:
a = [[1, 1, 1], [1, 1, 1]]
b = [[2, 2, 2], [2, 2, 2]]
我想:
c = [[3, 3, 3], [3, 3, 3]]
我一直在引用zip
文档,并研究其他帖子,但我们并不了解它们的工作原理。任何帮助将不胜感激!
答案 0 :(得分:2)
您可以将列表理解与zip()
一起使用为:
>>> a = [[1, 1, 1], [1, 1, 1]]
>>> b = [[2, 2, 2], [2, 2, 2]]
>>> [[i1+j1 for i1, j1 in zip(i,j)] for i, j in zip(a, b)]
[[3, 3, 3], [3, 3, 3]]
更通用的方法是创建一个函数:
def my_sum(*nested_lists):
return [[sum(items) for items in zip(*zipped_list)] for zipped_list in zip(*nested_lists)]
可以接受任意数量的列表。样品运行:
>>> a = [[1, 1, 1], [1, 1, 1]]
>>> b = [[2, 2, 2], [2, 2, 2]]
>>> c = [[3, 3, 3], [3, 3, 3]]
>>> my_sum(a, b, c)
[[6, 6, 6], [6, 6, 6]]
答案 1 :(得分:1)
如果您要完成这一切,那么您最好使用numpy
:
import numpy as np
a = [[1, 1, 1], [1, 1, 1]]
b = [[2, 2, 2], [2, 2, 2]]
aa = np.array(a)
bb = np.array(b)
c = aa + bb
使用numpy数组比在列表上重复使用zip
要有效得多。最重要的是,numpy允许您更加明确地使用数组,因此生成的代码通常很多更容易阅读。
如果您不想要第三方依赖,那么您需要做一些不同的事情:
c = []
for a_sublist, b_sublist in zip(a, b):
c.append([a_sublist_item + b_sublist_item for a_sublist_item, b_sublist_item in zip(a_sublist, b_sublist)])
希望变量名称能够清楚地说明它在这里发生了什么,但基本上,每个zip
接受输入并将它们组合起来(每个输入中有一个元素)。我们这里需要2个拉链 - zip
最外面的a
对列表来自b
的列表,而内部zip
配对已经配对的子列表中的各个元素。
答案 2 :(得分:0)
我使用python内置函数 map()来执行此操作。
如果我有简单的列表a和b,我就这样总结:
>>> a = [1,1,1]
>>> b = [2,2,2]
>>> map(lambda x, y: x + y, a, b)
[3, 3, 3]
如果我有嵌套列表a和b,我会以类似的方式对它们求和:
>>> a = [[1, 1, 1], [1, 1, 1]]
>>> b = [[2, 2, 2], [2, 2, 2]]
>>> map(lambda x, y: map(lambda i, j: i + j, x, y), a, b)
[[3, 3, 3], [3, 3, 3]]