1
1

Python イテラブル・イテレーター・ジェネレータ式を簡潔に

Posted at

Pythonを学ぶなかで、イテラブルイテレータージェネレータ式という存在に直面しました、、
これらはデータの処理やアルゴリズムの実装において非常に重要なものだそう。
本記事では、これらの概念をなるべく簡潔にまとめてみました。

イテラブル (Iterable)

イテラブルは、メンバーを一つずつ返すことができるオブジェクトです。
リスト、タプル、文字列、辞書など、Pythonの多くの組み込みデータ型がイテラブルです。

特徴

  • forループで繰り返し処理が可能
  • イテレーターに変換できる(iter()関数を使用)。

python
my_list = [1, 2, 3]
for item in my_list:
    print(item)
#->1
#->2
#->3

イテラブルではないもの

イテラブルでないとは、forループなどを使い、その要素を一つずつ取り出すことができないことを意味します。

整数 (int)

整数は単一の数値を表すため、イテラブルではありません。例えば、for i in 5:のようなコードはエラーを引き起こします。

浮動小数点数 (float)

浮動小数点数も単一の数値を表すため、イテラブルではありません。

論理値 (bool)

TrueやFalseのような論理値もイテラブルではありません。

NoneType

Noneは特別な値で、何も値を持たないことを表します。イテラブルではありません。

イテレーター (Iterator)

イテレーターは、next()関数を使用して次の要素を返すオブジェクトです。
イテラブルからiter()関数を使って生成されます。

特徴

  • next()関数を使って、次の要素を取得する
  • 要素がなくなると、StopIteration例外を発生させる
    -イテラブルよりも低レベルで、より制御が細かい

python
my_list = [1, 2, 3]
my_iter = iter(my_list)

print(next(my_iter))  # 1
print(next(my_iter))  # 2
# my_iterにはもう要素がない場合、next(my_iter)はStopIterationを発生させる

ジェネレータ式 (Generator Expression)

ジェネレータ式は、リスト内包表記に似た構文を用いて、一連の値を遅延評価で生成します。
ジェネレータはイテレーターの一種で、一度に一つの要素しかメモリに保持しません。

特徴

  • 大量のデータを扱う場合にメモリ効率が良い
  • 必要に応じて一つずつ値を生成し、next()でアクセスする
  • リスト内包表記よりもメモリ使用量が少ない
python
my_gen = (x * 2 for x in range(3))

for item in my_gen:
    print(item)  # 0, 2, 4
1
1
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
1
1