2011-12-19 13 views
2

私はちょうど疑問に思っています..どのようにforループ内のさまざまな要素を合計できますか?python sum function forloop

for element in [(2,7),(9,11)] : 
     g=sum(element[1]-element[0]+1) 
     print g 

私は '和' を削除した場合、私が取得:

6 
3 
+1

そして、あなたがしたいです9を得る? –

+0

はい、まさに:) –

+1

正確に何を取得しようとしていますか?それはあまり明確ではありません。タプルのすべての要素の合計が必要ですか?または合計のリスト? – pcalcao

答えて

11

は、私はあなたが取得したい何をすべきかわかりません。それですか?

>>> print sum(element[1]-element[0]+1 for element in [(2,7), (9,11)]) 
9 

このgenerator expression

temp = [] 
for element in [(2,7), (9,11)]: 
    temp.append(element[1]-element[0]+1) 
print sum(temp) 

と同等ですが、それはメモリ内のリストを作成する回避し、したがって、より効率的です。

+2

あなたは学者で精神的です!名声。 – dkamins

3

あなたはgenerator expressionでこれを置き換えることができます:

In [20]: sum(element[1] - element[0] + 1 for element in [(2, 7), (9, 11)]) 
Out[20]: 9 

これはに単純化することができます。私は読みやすく見つけて、リスト内の各要素を持っていることを保証

In [21]: sum(y - x + 1 for x,y in [(2, 7), (9, 11)]) 
Out[21]: 9 

...正確に2つの要素。そして、不要なラムダは使用しません。

1

あなたは、和のリストにこのような何かをあなたのリストをマッピングするためにラムダ関数を使用することができます。

list_of_tuples = [(2,4),(5,7)] 
list_of_sums = map(lambda x: x[0]+x[1], list_of_tuples) 

あり、同じことをやって他の多くの方法がありますが、あなたはマップを使用したことがない場合やラムダ関数、それはそれらを学ぶよい機会です);

0

これはあなたが参照しているものですか?

g = 0 
for element in [(2,7),(9,11)] : 
     g= g + (element[1]-element[0]+1) 
     print g 

sumのみiterableオブジェクト

を受け付け更新

g = 0 
for element in [(2,7),(9,11)] : 
     g += (element[1]-element[0]+1) 
print g # moved indention to show the sum 
+0

それは私だけですか、またはリターン6 9と9だけではありませんか? –

+1

これはありますが、インデントが最後の行で間違っているためです;-) – Johnsyweb

1

最も簡単な方法:

sum(map(lambda (x,y): y-x+1 , [(2,7),(9,11)])) 
2
>>> sum(right-left+1 for left,right in [(2,7),(9,11)]) 
9