我想在列表中获得两个不同值的总和。例如:
sample = [(1,3), (4,5), (8,2)]
我希望输出为
13, 10
我可以用几种不同的方式做到这一点。这是我目前的方式:
t1 = 0
t2 = 0
for item1, item2 in sample:
t1 += item1
t2 += item2
解决这个问题的更多Pythonic方法是什么?
答案 0 :(得分:7)
你可以试试这个:
from itertools import izip
sample = [(1,3), (4,5), (8,2)]
t1, t2 = map(sum, izip(*sample))
您还可以使用列表推导而不是map
。
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]
答案 1 :(得分:3)
功能性方法:
from operator import add
from functools import partial
sample = [(1,3), (4,5), (8,2)]
result = reduce(partial(map, add), sample)
运行此代码后, result
将成为列表[13, 10]
。
答案 2 :(得分:2)
sample = [(1,3), (4,5), (8,2)]
r1 = 0
r2 = 0
for v in sample:
r1, r2 = r1+v[0], r2+v[1]
print r1, r2
虽然@ FastTurtle很酷。
答案 3 :(得分:2)
单行:
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])))
答案 4 :(得分:1)
如果您打算这么做(在大数据集上),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])