36

次のようなタプル (常にペア) のリストがあります。

[(0, 1), (2, 3), (5, 7), (2, 1)]

各ペアの最初のアイテムの合計を見つけたいのですが、つまり:

0 + 2 + 5 + 2

Pythonでこれを行うにはどうすればよいですか? 現時点では、リストを繰り返し処理しています:

sum = 0
for pair in list_of_pairs:
   sum += pair[0]

もっとPython的な方法が必要だと感じています。

4

8 に答える 8

72

Pythonの最新バージョンでは、SilentGhostが投稿したものを提案します(明確にするためにここで繰り返します):

sum(i for i, j in list_of_pairs)

この回答の以前のバージョンでは、SilentGhost のバージョンが当時最新の Python (2.3) のバージョンでは機能しなかったため、これが必要であると提案しました。

sum([pair[0] for pair in list_of_pairs])

現在、そのバージョンの Python は時代遅れではなく、SilentGhost のコードは現在維持されているすべてのバージョンの Python で動作するため、最初に投稿したバージョンを推奨する理由はもうありません。

于 2009-03-12T10:39:31.147 に答える
44
sum(i for i, j in list_of_pairs)

もします。

于 2009-03-12T10:43:45.117 に答える
22

私はお勧め:

sum(i for i, _ in list_of_pairs)

:

の代わりに変数を使用する_(または__のエイリアスとの競合を避けるため) には、少なくとも 2 つの利点があります。gettextj

  1. _(プレースホルダーを表す)は読みやすくなっています
  2. pylint文句を言いません:「未使用の変数 'j'」
于 2012-04-21T03:24:43.627 に答える