Python 从一个列表中取两个和

Python 从一个列表中取两个和,python,list,Python,List,我想得到列表中两个不同值的和。例如: sample = [(1,3), (4,5), (8,2)] 我希望输出是 13, 10 我可以用几种不同的方法来做。以下是我目前的情况: t1 = 0 t2 = 0 for item1, item2 in sample: t1 += item1 t2 += item2 解决这一问题的更具蟒蛇风格的方法是什么?您可以尝试以下方法: from itertools import izip sample = [(1,3), (4,5), (8

我想得到列表中两个不同值的和。例如:

sample = [(1,3), (4,5), (8,2)]
我希望输出是

13, 10
我可以用几种不同的方法来做。以下是我目前的情况:

t1 = 0
t2 = 0
for item1, item2 in sample:
    t1 += item1
    t2 += item2
解决这一问题的更具蟒蛇风格的方法是什么?

您可以尝试以下方法:

from itertools import izip
sample = [(1,3), (4,5), (8,2)]
t1, t2 = map(sum, izip(*sample))
您还可以使用列表理解而不是
映射

from itertools import izip
sample = [(1,3), (4,5), (8,2)]
t1, t2 = [sum(t) for t in izip(*sample)]
您可以处理两个以上的金额:

from itertools import izip
sample = [(1, 3, 1), (4, 5, 1), (8, 2, 1)]
sums = [sum(t) for t in izip(*sample)]
# sums == [13, 10, 3]
尽管@FastTurtle's更酷。

一个衬里:

sum([ x[0] for x in sample ]), sum([ x[1] for x in sample ])
或对于未知维度的列表:

map(lambda i: sum(x[i] for x in sample), range(len(sample[0])))
函数方法:

from operator import add
from functools import partial
sample = [(1,3), (4,5), (8,2)]
result = reduce(partial(map, add), sample)

result
将是运行此代码后的列表
[13,10]

如果要经常这样做(在大数据集上),
numpy
将非常有用

>>> from numpy import *
>>> sample = [(1,3), (4,5), (8,2)]
>>> sum(array(sample), axis=1)
array([ 4,  9, 10])
>>> sum(array(sample), axis=0)
array([13, 10])

您的替代代码实际上不起作用<代码>样本[0]==(1,3)。啊,好的捕获。你说得对,我会把这个例子拉出来。我认为
itertools.izip
会更好,因为
zip
仍然必须有效地进行双循环,这是OP想要避免的。第三个例子在这种情况下看起来很理想,谢谢。@SilasRay感谢你指出
itertools.izip
。我已经更改了示例以使用它。
>>> from numpy import *
>>> sample = [(1,3), (4,5), (8,2)]
>>> sum(array(sample), axis=1)
array([ 4,  9, 10])
>>> sum(array(sample), axis=0)
array([13, 10])