Python forループのインデックスへのアクセス方法 [Python]

このエントリーをはてなブックマークに追加

質問:

例えばこんなリストがあったとき、このリストのインデックスにアクセスするにはどうしたらいいの?

ints = [8, 23, 45, 12, 78]

これをforループで使う時、どうやってこのループインデックス(この場合1から5)にアクセスしたらいいの?

By Joan Venge | 質問日時: Feb 6 ‘09 at 22:47



回答1:

インデックス変数とかの追加の状態変数を使用するのはあんまりPythonっぽく無いんだ(CとかPHPなどの言語だと普通だけど)。

より良い方法は組み込み関数を使うこと:
enumerate()]、Python2と3の両方で利用できるよ:

for idx, val in enumerate(ints):
print(idx, val)

詳しく知りたければPEP 279を参照してみて。

By Mike Hordecki | 回答日時: Feb 6 ‘09 at 22:52



回答2:

これをforループで使う時、どうやってこのループインデックス(この場合1から5)にアクセスしたらいいの?

enumerateを使おう:

for index, item in enumerate(items):
print(index, item)

あとインデックスはゼロから始まるので、これで0〜4になることに注意。もし、あんたがカウントをしたいっていうのなら、こんな感じに説明するかな。

慣習的じゃないやり方

君が求めているのは、以下のPythonicなやり方だろ。これはほとんどの低レベル言語のプログラマーはこのアルゴリズムを使うと思う:

index = 0 # Pythonのインデックスはゼロから始まる
for item in items: # Pythonのforループは "for each"ループ
print(index, item)
index += 1

それかfor-eachループを持たない言語だと:

index = 0
while index < len(items):
print(index, items[index])
index += 1

それか、ときどきより一般的に(慣習的じゃない)やり方:

for index in range(len(items)):
print(index, items[index])

列挙関数enumerateを使う

Pythonのenumerate関数は、インデックスのための計算処理を隠して、変数をカプセル化することで視覚的にごちゃごちゃしたのを減らす効果がある。こんな感じ:

for index, item in enumerate(items, start=0): # default is zero
print(index, item)

このコードサンプルは、Pythonの慣習的な書き方と、そうじゃない書き方の違いを表すかなり典型的な例。慣用的なコードは洗練されている(でもそんな複雑じゃない)Python。
この慣用コードは、言語の設計者が意図した書き方、つまり、通常このコードはあんまり読みやすくないけど、より効率的。

カウントする

たとえインデックスが必要じゃなくても、iterationsのカウントが1から始まって、最後は自分のカウントする数になってほしい(時にはあった方がいい)時がある。

for count, item in enumerate(items, start=1): # default is zero
print(item)
print('there were {0} items printed'.format(count))

カウントする、っていうのは君が求めているもの以上のもの(インデックスだけじゃなくて)だとおもうけど、念のため。


結論

  • Pythonのインデックスはゼロから始まる
  • 反復処理中にこれらのインデックスを反復可能コードから取得するには、列挙関数を使用します
  • 列挙型を慣用的な方法で(タプルのアンパックと一緒に)使用すると、読みやすくメンテナンス可能なコードが作れる。

だから、こうすべき:

for index, item in enumerate(items, start=0): # Pythonのインデックスはゼロから始まる
print(index, item)

By Aaron Hall | 回答日時: Jan 21 ‘15 at 17:11



回答3:

0以外の1から始めるのはかなり簡単:

for index in enumerate(iterable, start=1):
print index

注意

インデックスはここではタプル (idx、item)だよ。ちょっとややこしいかもだけど。

By Clayton | 回答日時: May 27 ‘14 at 10:04



回答4:

for i in range(len(ints)):
print i, ints[i]

By David Hanak | 回答日時: Feb 6 ‘09 at 22:49



Source: Accessing the index in Python ‘for’ loops

共有 コメント