たとえば、文字列のインデックスを取得したいとき、
forループをまわせば、
>>> s = 'PythonCarnival' >>> for item in s: ... print(item, 'のインデックスは', offset) ... offset += 1 ... P のインデックスは 0 y のインデックスは 1 t のインデックスは 2 h のインデックスは 3 o のインデックスは 4 n のインデックスは 5 C のインデックスは 6 a のインデックスは 7 r のインデックスは 8 n のインデックスは 9 i のインデックスは 10 v のインデックスは 11 a のインデックスは 12 l のインデックスは 13
しかし、インデックスと要素を取得したければ、enumerate関数でもっとシンプルに簡単にできます。
>>> s = 'PythonCarnival' >>> for (offset, item) in enumerate(s): ... print(item, 'のインデックスは', offset) ... P のインデックスは 0 y のインデックスは 1 t のインデックスは 2 h のインデックスは 3 o のインデックスは 4 n のインデックスは 5 C のインデックスは 6 a のインデックスは 7 r のインデックスは 8 n のインデックスは 9 i のインデックスは 10 v のインデックスは 11 a のインデックスは 12 l のインデックスは 13
リストを順番に処理する過程でenumerateは大活躍します。インデックスと要素の両方が必要になることはけっこうあります。
enumerateを使うとパイソニック(Pythonらしい)なコードに仕上がります。
シンプルで簡単です。
>>> words = ['Python', 'Django', 'Flask', 'Carnival', 'AI'] >>> for i,w in enumerate(words): ... print(w, 'は', i, '番目です') ... Python は 0 番目です Django は 1 番目です Flask は 2 番目です Carnival は 3 番目です AI は 4 番目です
インデックスだけが必要な時は_(アンダーバー)を使います。
>>> words = ['Python', 'Django', 'Flask', 'Carnival', 'AI'] >>> for i, _ in enumerate(words): ... print ('インデックスだけ→', i) ... インデックスだけ→ 0 インデックスだけ→ 1 インデックスだけ→ 2 インデックスだけ→ 3 インデックスだけ→ 4
こちらの書き方はおすすめされません。
>>> words = ['Python', 'Django', 'Flask', 'Carnival', 'AI'] >>> for i in range(len(words)): ... print(words[i], 'は', i, '番目です') ... Python は 0 番目です Django は 1 番目です Flask は 2 番目です Carnival は 3 番目です AI は 4 番目です >>> i = 0 >>> for w in words: ... print(w, 'は', i, '番目です') ... i += 1 ... Python は 0 番目です Django は 1 番目です Flask は 2 番目です Carnival は 3 番目です AI は 4 番目です