web-dev-qa-db-ja.com

コンテンツとインデックスの両方を含むリストをループする

pythonリストをループして、両方のコンテンツandのインデックスを取得することは非常に一般的です。私が通常行うことは次のとおりです。

S = [1,30,20,30,2] # My list
for s, i in Zip(S, range(len(S))):
    # Do stuff with the content s and the index i

この構文、特にZip関数内の部分が少しいです。これを行うエレガント/ Python的な方法はありますか?

90
Oriol Nieto

enumerate組み込み関数を使用します。 http://docs.python.org/library/functions.html#enumerate

62
BrenBarn

enumerate() を使用します。

>>> S = [1,30,20,30,2]
>>> for index, elem in enumerate(S):
        print(index, elem)

(0, 1)
(1, 30)
(2, 20)
(3, 30)
(4, 2)
166

みんなと同じように:

for i, val in enumerate(data):
    print i, val

しかしalso

for i, val in enumerate(data, 1):
    print i, val

つまり、 enumerateによって生成されたインデックス/カウントのstarting valueとして指定できます()デフォルト値のゼロでインデックスを開始したくない場合に便利です。

先日、ファイルの行を印刷し、enumerate()の開始値を1に指定しました。これは、特定の行に関する情報をユーザーに表示するときに0よりも意味がありました。

21
Levon

enumerateはあなたが望むものです:

for i, s in enumerate(S):
    print s, i
3
Adam Wagner
>>> for i, s in enumerate(S):
3
fraxel

enumerate()は次のようにきれいにします:

for index, value in enumerate(S):
    print index, value

詳細については here を参照してください。

3
Rob Volgman