17

我有一些数字列表:

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

假设我使用的所有列表长度相同,如何添加这些列表的元素?

这是我希望从上述列表中获得的输出类型。

[6, 9, 12, 15, 18]

我知道我需要某种循环——但我怎样才能优雅地做到这一点?

4

6 回答 6

32

试试这个功能风格的代码:

>>> 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)]

然后sum通过使用 应用于每个元组map

在线查看它:ideone


请注意,在 Python 3.x 中,map不再返回列表。如果您需要该列表,请参阅以下问题:

(你可以打电话list)。

于 2012-07-01T08:25:28.940 回答
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]
于 2012-07-01T08:26:14.210 回答
6

假设:

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])]
于 2012-07-01T08:27:39.497 回答
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])
于 2012-07-01T08:51:56.293 回答
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))
于 2012-07-01T08:27:13.303 回答
1

这也适用于各种长度的列表(仅嵌套 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
于 2020-06-03T14:57:40.413 回答