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

Ben*_*Ben 27 python tuples list

我有一个像这样的元组列表(总是对):

[(0, 1), (2, 3), (5, 7), (2, 1)]
Run Code Online (Sandbox Code Playgroud)

我想找到每对中第一项的总和,即:

0 + 2 + 5 + 2
Run Code Online (Sandbox Code Playgroud)

我怎么能用Python做到这一点?目前我正在遍历列表:

sum = 0
for pair in list_of_pairs:
   sum += pair[0]
Run Code Online (Sandbox Code Playgroud)

我觉得必须有更多的Pythonic方式.

Dav*_*d Z 60

与Python 2.3兼容的版本是

sum([pair[0] for pair in list_of_pairs])
Run Code Online (Sandbox Code Playgroud)

或者在Python的最新版本中,请参阅此答案答案.

  • 我删除了方括号,因为它们使得它更慢,因为python首先创建列表.sum()适用于迭代器. (2认同)

Sil*_*ost 37

sum(i for i, j in list_of_pairs)
Run Code Online (Sandbox Code Playgroud)

也会这样做.

  • 我应该注意到这段代码比接受答案的代码快15%左右. (2认同)

Hui*_*eng 15

我建议:

sum(i for i, _ in list_of_pairs)
Run Code Online (Sandbox Code Playgroud)

注意:

使用变量_(或__避免与别名冲突gettext)而不是j至少有两个好处:

  1. _(代表占位符)具有更好的可读性
  2. pylint 不会抱怨:"未使用的变量'j'"


小智 5

如果您有一个非常大的列表或生成大量对的生成器,您可能希望使用基于生成器的方法.为了好玩,我用itemgetter()imap()也.但是,基于简单生成器的方法可能就足够了.

import operator
import itertools

idx0 = operator.itemgetter(0)
list_of_pairs = [(0, 1), (2, 3), (5, 7), (2, 1)]
sum(itertools.imap(idx0, list_of_pairs))
Run Code Online (Sandbox Code Playgroud)

请注意,itertools.imap()它在Python> = 2.3中可用.所以你也可以在那里使用基于生成器的方法.