添加元组以生成具有每个"列"小计的元组

Dal*_*idy 2 python tuples

添加两个或更多元组的值以产生每个"列"总数的最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)

我相信这远非理想 - 如何改进?

ars*_*ars 6

我想你可以使用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)

  • @Chris:ipython:http://ipython.scipy.org/moin/ - 太棒了,我推荐不够! (2认同)