【 Python 】イテレータとイテラブル・オブジェクト

この記事は、for文を知りたいんだけど。という方や、イテラブル・オブジェクトってなんぞ?という方向けの記事となっております。

イテレータってなんぞ?

イテレータはプログラミングにおいて、次の要素を読み込んで繰り返すことを言います。

そして、イテラブル・オブジェクトは、次の要素を読み込んで繰り返すオブジェクトのことを言います。

正直なんだそれ?って感じですね(笑)

しかしながら、このイテラブル・オブジェクトはPythonでのfor文に必要な要素です。

初心者がつまづきそうなポイントを押さえつつ説明しますので、しっかり頭に入れましょう!

イテレータの実際の動き

Python
samplelist = ["わ","た","し","は","こ","な","ゆ","き","で","す"]

iterator_samplelist = iter(samplelist)

print(next(iterator_samplelist)) # 現段階のイテラブル・オブジェクトを表示後、次のイテラブル・オブジェクトへ
print(next(iterator_samplelist))
print(next(iterator_samplelist))
print(next(iterator_samplelist))
print(next(iterator_samplelist))
print(next(iterator_samplelist))
print(next(iterator_samplelist))
print(next(iterator_samplelist))
print(next(iterator_samplelist))
print(next(iterator_samplelist))
print(next(iterator_samplelist))
print(next(iterator_samplelist))

これをIDLEで実行すると、結果は以下のようになります。

Python
わ
た
し
は
こ
な
ゆ
き
で
す
Traceback (most recent call last):
  File "E:/☆Python/practice_for1.py", line 15, in <module>
    print(next(iterator_samplelist))
StopIteration
[st-mybox title=”1行目” fontawesome=”” color=”#757575″ bordercolor=”#ccc” bgcolor=”#ffffff” borderwidth=”2″ borderradius=”2″ titleweight=”bold”] [st-marumozi fontawesome=”” bgcolor=”#F48FB1″ color=”#fff” radius=”30″ margin=”0 10px 0 0″]日本語訳:[/st-marumozi] samplelistの配列に、「わ」「た」「し」........「す」を順番に格納しなさい。という命令文です。
[st-cmemo fontawesome=”fa-lightbulb-o” iconcolor=”#FFA726″ bgcolor=”#FFF3E0″ color=”#000000″ iconsize=”100″]配列は、変数の中に箱を作ってその中に格納していくイメージです。[/st-cmemo] 簡単な図になりますが、一次元配列はこのようにイメージしてもらえれば分かりやすいと思います。

[/st-mybox] [st-mybox title=”2行目” fontawesome=”” color=”#757575″ bordercolor=”#ccc” bgcolor=”#ffffff” borderwidth=”2″ borderradius=”2″ titleweight=”bold”] この記事の最難関になりますが、iteration_samplelistはsamplelistのイテラブル・オブジェクトですよ。という指定です。

iter()関数でsamplelistを次の要素を読み込めるように、iterator_samplelistに入れ直したことを意味します。

次の行以降で、それが明らかになります。
[/st-mybox] [st-mybox title=”3行目以降” fontawesome=”” color=”#757575″ bordercolor=”#ccc” bgcolor=”#ffffff” borderwidth=”2″ borderradius=”2″ titleweight=”bold”]

print(next(iterator_samplelist))
[st-marumozi fontawesome=”” bgcolor=”#F48FB1″ color=”#fff” radius=”30″ margin=”0 10px 0 0″]日本語訳:[/st-marumozi] 現段階のiterator_samplelistを出力し、次のiterator_samplelistに移りなさい。という命令です。next()関数が入っているので分かりやすいですね。
[/st-mybox]

実行結果の最後では、11番目(samplelist[10])には何も入っていないため、「もう入ってないのに、print()しないで」というエラーが表示されます。

まとめ

イテレータは一度わかってしまえば、ごく単純なもので、特にiter()関数は次の要素を読み込めるというだけの関数です。

ここさえ、乗り切ってしまえば、繰り返し処理を理解するのは容易くなるはずですので、イテレートとイテレートされたオブジェクト(イテラブル・オブジェクト)はしっかり抑えておきましょう!

最後までお読みいただきありがとうございました。