1. ホーム 
  2. 備忘録 
  3. Python

ジェネレータ内包表記

ジェネレータ内包表記とは

Pythonではジェネレータも内包表記で作成することができる

ジェネレータ内包表記は () で囲んで作成する

() で囲うものとしてはタプルが代表的だが、タプルには内包表記は存在しない


(式 for 仮変数 in イテラブルなオブジェクト if 条件)

上記の意味合いはイテラブルなオブジェクトから要素を仮変数として抜き出し、
条件に一致するものに対してを適用した値を返却するジェネレータ―オブジェクトを作成するということになる

ジェネレータ内包表記について具体的な例を以下に記載する


### 基本的な書き方
# ()だけならジェネレータ
g = (i for i in range(10))
print(type(g))  # <class 'generator'>

# タプルとして扱う場合は tuple() で型変換する
g = tuple(i for i in range(10))
print(g, type(g))  # (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) <class 'tuple'>

### if文を組み合わせる
# 偶数のみ返すジェネレータ
g = (i for i in range(10) if i % 2 == 0)
for x in g:
    print(x, end=' ')  # 0 2 4 6 8


"""
ジェネレータ内包表記のメリット
・1行で書けてコードが短くなる
・反復処理を行う際、一つずつデータを生成するためメモリの消費量を抑えることができる
・メモリが節約できる結果、大容量のデータを扱う場合に実行処理速度を上げることができる

しかし、1行で書けるからといって条件を複雑にしていくと可読性が下がるため、
長くなる場合は通常の方法でジェネレータを作成すること
"""