109

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

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的な方法はありますか?

4

6 に答える 6

191

使用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)
于 2012-07-13T17:56:04.453 に答える
69

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

于 2012-07-13T17:55:34.867 に答える
25

みんなみたいに:

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

しかしまた

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

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

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

于 2012-07-13T18:00:12.543 に答える
6

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

for i, s in enumerate(S):
    print s, i
于 2012-07-13T17:56:22.593 に答える
4
>>> for i, s in enumerate(S):
于 2012-07-13T17:56:26.223 に答える
4

enumerate()これをよりきれいにします:

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

詳しくはこちらをご覧ください。

于 2012-07-13T17:56:42.410 に答える