LoginSignup
0
0

More than 1 year has passed since last update.

イテレータとイテラブルについて(備忘録)

Last updated at Posted at 2022-12-08

イテレータとは?

イテレータとは、イテラブル(繰り返し可能)なオブジェクトから要素を取り出すオブジェクトのことです。
※イテラブル…for文を用いて、繰り返し処理ができるオブジェクトのこと。リストやタプルなどがあげられます。

next関数とiter関数について

next関数は、next(イテレーター) のようにイテレータから要素を一つ取り出して消去することができる関数のこと。最後の要素を取り出し終わり、再度、関数を実行しようとするとstopIterationという例外が発生する。(繰り返し停止の意味)

iter関数とは、指定されたイテラブルに対するイテレーター(iterator)を返す関数のこと。

>>> iterater = iter([3, 10, 7])
# インデックス0から順番に取り出していく
>>> next(iterater)
3
>>> next(iterater) 
10
>>> next(iterater)
7
# エラーが発生する
>>> next(iterater)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

イテラブルとイテレータの違い

仮に、for i in some_list と書いたときfor文は、some_listに実装されているiter()を呼び出して、その戻り値を使います。この戻り値をイテレータと呼びます。for文では、inの後にしてされたオブジェクトには、必ずiter()を適応する。

イテレータオブジェクトは、特殊メッソドの「iter()」と「next()」が実装されています。

some_list = iter([0, 1, 2, 3, 4, 5])
print(dir(some_list))

>>>[---省略---'__iter__', ---省略---, '__next__', ---省略---]

対して、listの特殊、メッソドを表示してみます。

some_list = [0, 1, 2, 3, 4, 5]
print(dir(some_list))
    # イテレーターを生成できるが、次の要素にアクセスする機能を持ちえない
>>>[---省略--- '__iter__', ---省略---]

つまり、イテレータは、next()を使うことができるので、次の要素にアクセスできるが、イテラブル(list)は、next()を使うことができないので、次の要素にアクセスする機能を持ちえません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0