web-dev-qa-db-ja.com

Pythonでタプルのリストを列挙するにはどうすればよいですか?

私はこのようなコードを持っています:

letters = [('a', 'A'), ('b', 'B')]
i = 0
for (lowercase, uppercase) in letters:
    print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
    i += 1

「i」変数を処理できるenumerate()関数があると言われました。

for i, l in enumerate(['a', 'b', 'c']):
    print "%d: %s" % (i, l)

ただし、2つを組み合わせる方法がわかりません。問題のリストがタプルで構成されている場合に、列挙を使用するにはどうすればよいですか?これを行う必要がありますか?

letters = [('a', 'A'), ('b', 'B')]
for i, Tuple in enumerate(letters):
    (lowercase, uppercase) = Tuple
    print "Letter #%d is %s/%s" % (i, lowercase, uppercase)

それとももっとエレガントな方法がありますか?

45
mike

これはそれを行うためのきちんとした方法です:

letters = [('a', 'A'), ('b', 'B')]
for i, (lowercase, uppercase) in enumerate(letters):
    print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
98
RichieHindle

これは私がそれをする方法です:

import itertools

letters = [('a', 'A'), ('b', 'B')]
for i, lower, upper in Zip(itertools.count(),*Zip(*letters)):
    print "Letter #%d is %s/%s" % (i, lower, upper)

編集:解凍は冗長になります。これはよりコンパクトな方法であり、ユースケースに応じて機能する場合と機能しない場合があります。

import itertools

letters = [('a', 'A'), ('b', 'B')]
for i in Zip(itertools.count(),*Zip(*letters)):
    print "Letter #%d is %s/%s" % i
4
Algorias

あなたもこのようにすることができます:

letters = [('a', 'A'), ('b', 'B')]
for i, letter in enumerate(letters):
    print "Letter #%d is %s/%s" % (i, letter[0], letter[1])
1
anacarolinats