Pythonのイテレーターを分かりやすく解説してみた

2019年12月1日

みなさまおはこんばんにちは、せなです

今回はイテレーターについて解説したいと思います

イテレーターとは

イテレーターはlist、tupleなど配列に関係するものの次のデータに対して順番にアクセスし、データを処理していくことを指します

そのため普段意識していないだけでイテレーターはよく使われています

代表的なものですと「for」文がそれにあたります
以下のコードを見て下さい

list = ['a', 'b', 'c', 'd']

for s in list:
    print(s)

----結果----
a
b
c
d

ここで使われている「for s in list」では「list」の要素に順にアクセスし「s」へと格納しています

この格納される時に内部的にイテレーターの機能が実行されています

イテレーターの関数:iter()

以下のコードを見て下さい

list = ['a', 'b', 'c', 'd']
i = iter(list)
next(i)
'a'
next(i)
'b'
next(i)
'c'
next(i)
'd'
next(i)
StopIteration

イテレーターはリストなどに対して「iter()」を使用することでイテラルオブジェクト化します

そのオブジェクトに対して「next()」を使用することで次の要素に進み、最後まで行くと「StopIteration」エラーが発生します

イテレーター生成関数:itertools()

Pythonにはライブラリにitertoolsというイテレーターオブジェクトの操作を行うことができる関数があります

ドキュメント:itertools()

以下にいくつかの簡単なイテレーター関数を書いておきます

accmulate()」はリストの累積和をイテレーターとして返します

import itertools

ary = [1, 2, 3, 4, 5]
sum = itertools.accumulate(ary)
list(sum)

----結果----
[1, 3, 6, 10, 15]

chain()」は与えられた要素を先頭から返し、すべての値を返してイテレーターを作成します

cha = itertools.chain('abc','def')
list(cha)

----結果----
['a', 'b', 'c', 'd', 'e', 'f']

groupby()」は先頭から同じKeyを持つものをグループ化し、それぞれをイテレーターとして返します

groups = ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'D', 'A', 'A', 'B', 'B', 'B']
gr = itertools.groupby(groups)
for key, group in gr:
    f'{key}: {list(group)}'

----結果----
A: ['A', 'A', 'A', 'A']
B: ['B', 'B', 'B']
C: ['C', 'C']
D: ['D']
A: ['A', 'A']
B: ['B', 'B', 'B']

最後に

最初にザックリ解説、後半に使い方を簡単に解説しました

ここまで読んで下さりありがとうございました
何かの助けになれたなら幸いです

ではでは~