![](/img/trans.png)
[英]How do I sum the first two values in each tuple in a list of tuples in Python?
[英]How do I sum the first value in each tuple in a list of tuples in Python?
我有一個像這樣的元組列表(總是成對的):
[(0, 1), (2, 3), (5, 7), (2, 1)]
我想找到每對中第一項的總和,即:
0 + 2 + 5 + 2
我怎樣才能在 Python 中做到這一點? 目前我正在遍歷列表:
sum = 0
for pair in list_of_pairs:
sum += pair[0]
我有一種感覺,必須有一種更 Pythonic 的方式。
sum(i for i, j in list_of_pairs)
也會做。
我建議:
sum(i for i, _ in list_of_pairs)
注意:
使用變量_
(或__
以避免與gettext
的別名沖突)而不是j
至少有兩個好處:
_
(代表占位符)具有更好的可讀性pylint
不會抱怨:“未使用的變量‘j’”如果您有一個非常大的列表或生成大量對的生成器,您可能需要使用基於生成器的方法。 為了好玩,我也使用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))
請注意itertools.imap()
在 Python >= 2.3 中可用。 所以你也可以在那里使用基於生成器的方法。
晦澀(但有趣)的答案:
>>> sum(zip(*list_of_pairs)[0])
9
或者當 zip 是可迭代的時,只有這應該工作:
>>> sum(zip(*list_of_pairs).__next__())
9
下面是示例代碼,您還可以指定列表范圍。
def test_lst_sum():
lst = [1, 3, 5]
print sum(lst) # 9
print sum(lst[1:]) # 8
print sum(lst[5:]) # 0 out of range so return 0
print sum(lst[5:-1]) # 0
print sum(lst[1: -1]) # 3
lst_tp = [('33', 1), ('88', 2), ('22', 3), ('44', 4)]
print sum(x[1] for x in lst_tp[1:]) # 9
如果你不介意將其轉換為numpy的數組,你可以使用np.sum
在axis=0
給出這里
s,p=0,0
for i in l:
s=s+i[0]
p=p+i[1]
print(tuple(s,p))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.