prefer_indic = [[[0, 4, 6, 5, 45, 1], [2, 3, 5, 6, 7, 1]],[[0, 0.27, 6, 7, 32, 3], [0.01, 0.39, 0, 0, 0, 0]]]
我想创建一个总和列表,它将从每个列表列表中添加每个相应值的值。 为了准确,我想:
sum = [[0+0, 4+0.27, 6+6, 5+7, 45+32, 1+3], [2+0.1, 3+0.39, 5+0, 6+0, 7+0, 1+0]]
我想用for循环这样做,这样我就可以使用相同的算法来获得更大的list列表。我使这个例子变得简单,使它更具可读性。我有python 2.7。
答案 0 :(得分:3)
使用zip()
function配对来自2个或更多列表的元素,然后使用sum()
添加组合值:
summed = [[sum(zipped) for zipped in zip(*column)] for column in zip(*prefer_indic)]
请注意zip(*prefer_indic)
调用,转置您的矩阵,以便您配对嵌套列表的“列”,而不是行。
如果您的列表较大,则使用iterative version of zip
可能会有所帮助;使用future_builtins.zip()
location,您的代码将自动向前兼容Python 3:
try:
from future_builtins import zip
except ImportError:
# Python 3
summed = [[sum(zipped) for zipped in zip(*column)] for column in zip(*prefer_indic)]
演示:
>>> from future_builtins import zip
>>> prefer_indic = [[[0, 4, 6, 5, 45, 1], [2, 3, 5, 6, 7, 1]],[[0, 0.27, 6, 7, 32, 3], [0.01, 0.39, 0, 0, 0, 0]]]
>>> [[sum(zipped) for zipped in zip(*column)] for column in zip(*prefer_indic)]
[[0, 4.27, 12, 12, 77, 4], [2.01, 3.39, 5, 6, 7, 1]]
答案 1 :(得分:0)
我会定义一个添加两个列表的函数,然后使用列表推导来计算您想要的结果:
view.playing=YES
view.loops=YES
对于你的例子
def add_lists(a, b):
return list(x+y for x, y in zip(a, b))
s = list(add_lists(*l) for l in zip(*prefer_indic))
结果将是
prefer_indic = [[[0, 4, 6, 5, 45, 1], [2, 3, 5, 6, 7, 1]],[[0, 0.27, 6, 7, 32, 3], [0.01, 0.39, 0, 0, 0, 0]]]