添加两个或更多元组的值以产生每个"列"总数的最pythonic方法是什么?
例如:
>>> a = (10, 20)
>>> b = (40, 50)
>>> c = (1, 3)
>>> ???
(51, 73)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我考虑过以下几点:
def sumtuples(*tuples):
return (sum(v1 for v1,_ in tuples), sum(v2 for _,v2 in tuples))
>>> print sumtuples(a, b, c)
(51, 73)
Run Code Online (Sandbox Code Playgroud)
我相信这远非理想 - 如何改进?
我想你可以使用reduce,虽然这是否是pythonic是有争议的..
In [13]: reduce(lambda s, t: (s[0]+t[0], s[1]+t[1]), [a, b, c], (0, 0))
Out[13]: (51, 73)
Run Code Online (Sandbox Code Playgroud)
这是使用map和的另一种方式zip:
In [14]: map(sum, zip(a, b, c))
Out[14]: [51, 73]
Run Code Online (Sandbox Code Playgroud)
或者,如果您将列表集合作为列表传递:
In [15]: tups = [a, b, c]
In [15]: map(sum, zip(*tups))
Out[15]: [51, 73]
Run Code Online (Sandbox Code Playgroud)
并使用列表理解而不是map:
In [16]: [sum(z) for z in zip(*tups)]
Out[16]: [51, 73]
Run Code Online (Sandbox Code Playgroud)