如何将几个数字列表中对应的元素相加?

18
我有一些数字列表:
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]

如果我使用的所有列表长度都相同,我该如何将这些列表的元素相加?

以下是我希望从上述列表执行此操作时获得的输出类型。

[6, 9, 12, 15, 18]

我知道我需要某种循环 - 但如何才能优雅地做到这一点呢?

6个回答

34

尝试这段函数式代码:

>>> map(sum, zip(*lists))
[6, 9, 12, 15, 18]

zip 函数将具有相同索引的元素进行匹配。

>>> zip(*lists)
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]

然后使用mapsum应用于每个元组。

在线查看其工作原理:ideone


请注意,在Python 3.x中,map不再返回列表。如果您需要列表,请参见以下问题: (您可以直接调用list)。

map 函数在 Python 3.x 中返回一个映射对象。 - Ashwini Chaudhary
@AshwiniChaudhary: 我假设使用Python 2.x,除非有人指定其他版本,但我已经添加了关于Python 3.x的注释。 - Mark Byers

9
>>> lis=[[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]]

>>> [sum(x) for x in zip(*lis)]
[6, 9, 12, 15, 18]

7
假设:
a = [1,2,3,4,5]
b = [2,3,4,5,6]
c = [3,4,5,6,7]

只需这样做:

[sum(n) for n in zip(*[a, b, c])]

6

使用numpy

>>> seq = np.array([
... [1,2,3,4,5],
... [2,3,4,5,6],
... [3,4,5,6,7]])
>>> np.sum(seq,axis=0)
array([ 6,  9, 12, 15, 18])

1
除非 OP 想继续使用 numpy,否则我不确定转换到和从 numpy 是否是最佳选择。当然,如果需要执行更多的计算,numpy 将是最佳选择。 - Dhara

2
如何:
a = [1,2,3,4,5]
b = [2,3,4,5,6]
c = [3,4,5,6,7]

s = map(sum, zip(a,b,c))

1
这个适用于各种长度的列表(仅嵌套一次)。
def sum_list_of_list_of_int(ll):
    l=[]
    for i in ll:  # "i" type is list
        for ii in range(len(i)):  # "ii" type is int
            if len(l)-1>=ii:
                l[ii]+=int(i[ii])
            else:
                l.append(int(i[ii]))
    return l

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接