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的な方法はありますか?
enumerate
組み込み関数を使用します。 http://docs.python.org/library/functions.html#enumerate
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)
みんなと同じように:
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よりも意味がありました。
enumerate
はあなたが望むものです:
for i, s in enumerate(S):
print s, i
>>> for i, s in enumerate(S):
enumerate()
は次のようにきれいにします:
for index, value in enumerate(S):
print index, value
詳細については here を参照してください。