如何使用for循环查找列表列表的总和

时间:2016-08-26 09:23:06

标签: python python-2.7 for-loop sum

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。

2 个答案:

答案 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]]]