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)
Sil*_*ost 37
sum(i for i, j in list_of_pairs)
Run Code Online (Sandbox Code Playgroud)
也会这样做.
Hui*_*eng 15
我建议:
sum(i for i, _ in list_of_pairs)
Run Code Online (Sandbox Code Playgroud)
注意:
使用变量_
(或__
避免与别名冲突gettext
)而不是j
至少有两个好处:
_
(代表占位符)具有更好的可读性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中可用.所以你也可以在那里使用基于生成器的方法.