对元组列表中的每个值求和

Inb*_*ose 27 python performance list-comprehension list python-2.7

我有一个与此类似的元组列表:

l = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 0)]
Run Code Online (Sandbox Code Playgroud)

我想创建一个简单的单行程序,它会给我以下结果:

r = (25, 20) or r = [25, 20] # don't care if tuple or list.
Run Code Online (Sandbox Code Playgroud)

这就像做以下事情:

r = [0, 0]
for t in l:
  r[0]+=t[0]
  r[1]+=t[1]
Run Code Online (Sandbox Code Playgroud)

我确信这很简单,但我想不出来.

注意:我已经查看了类似的问题:

如何将元组中的一组列表中的第一个值相加?

如何在Python中的元组列表中对每个元组中的第一个值求和?

Ash*_*ary 57

使用zip()sum():

In [1]: l = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 0)]

In [2]: [sum(x) for x in zip(*l)]
Out[2]: [25, 20]
Run Code Online (Sandbox Code Playgroud)

要么:

In [4]: map(sum, zip(*l))
Out[4]: [25, 20]
Run Code Online (Sandbox Code Playgroud)

timeit 结果:

In [16]: l = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 0)]*1000

In [17]: %timeit [sum(x) for x in zip(*l)]
1000 loops, best of 3: 1.46 ms per loop

In [18]: %timeit [sum(x) for x in izip(*l)]       #prefer itertools.izip
1000 loops, best of 3: 1.28 ms per loop

In [19]: %timeit map(sum, zip(*l))
100 loops, best of 3: 1.48 ms per loop

In [20]: %timeit map(sum, izip(*l))                #prefer itertools.izip
1000 loops, best of 3: 1.29 ms per loop
Run Code Online (Sandbox Code Playgroud)

  • 当与内置函数一起使用时,`map`有时优于`list comprehension`. (2认同)
  • 出于兴趣,当您进入“zip(*l)”时,星号意味着什么? (2认同)
  • @nick_w用于`zip()`与*一起使用就像解压缩列表一样.http://docs.python.org/2/library/functions.html#zip (2认同)