Python

【Python】イテレータとは何か、使い方も含めて解説


プログラミング言語によっては「イテレータ」という謎の概念に出会うことがあります。

この記事では、このイテレータという概念はどのようなものなのか、また、その基本的な使い方(Pythonを使用)について解説しようと思います。

そもそも「イテレータ」とは?

まずは簡単にイテレータとは何かについて説明します。

データの走査を行うオブジェクト

イテレータとは、データを走査するポインタのような役割を持つオブジェクトです。

組み込みの関数であるnext()の引数にイテレータを指定することで各要素を一つずつ取り出していくことができます。

大量のデータを一度に全て読み込んでから処理を行うよりも、イテレータを用いて逐次的な処理を行う方がメモリ的にも効率が良いです。

「イテレータ」はどうやって使うの?

ここでは、イテレータの基本的な使い方について説明します。

基本的な使い方

イテレータはiter()の引数にリスト、タプルなど指定することで作成します。

前述したようにnext()の引数にイテレータを指定することで各要素を取り出していくことができます。取り出す要素が無くなった場合はStopIteration例外が発生して終了です。

>>> x = iter([0,1,2])  # イテレータを作成
>>> x


>>> next(x)
0
>>> next(x)
1
>>> next(x)
2
>>> next(x)  # 最後はStopIterarionが発生する
Traceback (most recent call last):
...
StopIterarion

以上がイテレータの基本的な使い方です。

使用例 1

以下にwhile文を使用してイテレータから要素を逐次的に取り出す処理を実装したプログラムを示します。使用する言語はPythonです。

if __name__ == '__main__':

    numbers = iter([0,1,2])  # イテレータを作成

    try:
        while True:
            print(next(numbers))
    except StopIteration:  # StopIteration例外を検知する
        pass

    print('done.')

このプログラムを実行すると以下の出力結果が得られます。

0
1
2
done.

※StopIterationが発生してしまった時の対処(上記コードのexceptの部分)を用意していないとプログラム自体が終了していまうため注意が必要です。

使用例 2

以下にfor文を使用してイテレータから要素を逐次的に取り出す処理を実装したプログラムを示します。使用する言語はPythonです。

if __name__ == '__main__':

    numbers = iter([0,1,2])  # イテレータを作成

    # イテレータの要素を一つずつ表示する
    for num in numbers:
        print(num)
    print('done.')

    # もう一度イテレータを呼び出す
    for num in numbers:
        print(num)
    print('done.')

このプログラムを実行すると以下の出力結果が得られます。

0
1
2
done.
done.

※イテレータの各要素は一度しか取り出すことができません。そのため、二度目のfor文の部分では何も表示されずにループが終了しています。