レッスン1 / 2問目

『イテレーター』

このレッスンではイテレーターについて学習していきましょう。

イテレーターとは

ここではイテレーターについて解説しますが、概念や用途などは後ほど説明します。まずは使い方から見ていきましょう。

イテレーターは、iter()関数の引数にリストやタプルなどのオブジェクトを渡すことで作成することができます。これにより、引数に渡したリストやタプルに対して、for文のような、順番に要素を取り出す機能を提供します。

  1. i = iter([1, 2, 3, 4, 5, 6])    # イテレーターを生成
  2. print(i)    # イテレーターオブジェクトを出力
  3. print(type(i))    # イテレーターオブジェクトの型を出力
<list_iterator object at 0x7fe82be2f710> <class 'list_iterator'>

これでイテレーターを生成することができました。

イテレーターオブジェクトは以下のようにnext()関数の引数に渡すことで順番に要素を取り出すことができます。

  1. i = iter([1, 2, 3, 4, 5, 6])
  2. print(next(i))    # 1
  3. print(next(i))    # 2
  4. print(next(i))    # 3
  5. print(next(i))    # 4
  6. print(next(i))    # 5
  7. print(next(i))    # 6
  8. print(next(i))    # 例外StopIterationが発生する
1 2 3 4 5 6 Traceback (most recent call last): File "main.py", line 8, in print(next(i)) StopIteration

イテレーターは要素を順番に取り出した状態を記憶することができるため、上記のように順番に要素を取り出すことができています。これがイテレーターの特徴です。
そして、全ての要素を取り出し、イテレーターが空になった場合(9行目)は、例外StopIterationが発生します。

また、イテレーターは繰り返し処理でループすることもできます。


for文の内部でイテレーターを生成している

このイテレーターですが、実は皆さんがfor文を使用する際に、内部でリストからイテレーターを作る処理がされていました。

  1. for i in [1, 2, 3, 4, 5, 6]:    # 内部でイテレーターに変換される
  2.     print(i)
1 2 3 4 5 6

上記のコードはfor文でリストをループするコードですが、for文では内部的にリストをイテレーターに変換し、ループを行っています。

つまり上記のコードは以下のコードと等価です。

  1. a = iter([1, 2, 3, 4, 5, 6])    # イテレーターを生成
  2. for i in a:    # 生成したイテレーターをループ
  3.     print(i)
1 2 3 4 5 6

また、リストやタプルのようなfor文に渡すことで、ループすることができるオブジェクトをイテラブル(反復可能オブジェクト)と呼びます。


ここではイテレーターについて取り上げましたが、皆さんが、このイテレータについて意識することは滅多にありません。なぜかというとリストなどの反復可能オブジェクトをfor文でループすることにより、自動的にイテレーターに変換され、ループすることができているためです。

また、iter()やnext()を実際に使うことも少ないでしょう。しかしながら、ここで見た、iter()やnext()のような処理が内部で行われているということを理解することで、Pythonプログラミングに対する理解がより深まります。

まとめ

このレッスンンの内容についてまとめます。

  • イテレーターの特徴は「順番に要素を取り出す機能」つまり「要素を順番に取り出した状況を記憶することができる点」である
  • for文の内部ではリストなどのオブジェクトをイテレーターに変換することによって繰り返し処理を実現している
  • リストやタプル、辞書などのfor文でループすることができるオブジェクトをイテラブル(反復可能オブジェクト)と呼ぶ

イテレーターとイテレブルはよく似ていますが、これらは異なりますので、注意してください。

では、演習課題にチャレンジしましょう。

Lesson1

リストaからイテレーターを生成してください。変数名は任意とします。

Lesson2

next関数を用いて生成したイテレーターの要素を全て出力してください。

Last updated:2019/12/21

A
B
C
D
  1. a = ("A", "B", "C", "D")
  2. # aからイテレーターを生成してください
  3. i = iter(a)
  4. # next関数を用いてイテレーターの要素を全て出力してください
  5. print(next(i))
  6. print(next(i))
  7. print(next(i))
  8. print(next(i))
main.py
設定
g
n
i
d
a
o
L