目次
リストとジェネレータ式とリスト内包表記の違いのまとめ
| 書き方 | 評価方法 | 主な用途 | |
|---|---|---|---|
| リスト | [ ] | すぐに全要素生成 | 小~中規模データの操作 |
| ジェネレータ式 | ( ) | 必要な時に順次生成 | 大量データ・無限列 |
| リスト内包表記 | [ ] | すぐに全要素生成 | 簡潔にリストを生成 |
リスト → データを全部メモリに置いておきたいとき。
ジェネレータ式 → データを順次処理したいとき(大量 or 無限)。
リスト内包表記 → リストを簡潔に作るための文法。単なる糖衣構文で、内部的には通常のリストと同じです。
糖衣構文
人間にとって書きやすく、読みやすくするための文法の工夫のことです。
中身は従来の書き方に展開できます。
リストとは
fruits = ["apple", "banana", "orange"]
fruits[0] # "apple"
fruits.append("grape") # 追加可能
書き方: [ ]
特徴
すべての要素を一度に生成してメモリに保持。
ランダムアクセス(list[5] など)ができる。
複数回使える(再利用可能)。
ジェネレータ式とは
gen = (x * x for x in range(3))
print(next(gen)) # 0
print(next(gen)) # 1
print(next(gen)) # 4
# print(next(gen)) # StopIteration (もう要素がない)
書き方: (式 for 変数 in イテラブル)
特徴
値が必要になった時に順次生成(遅延評価)。
メモリ効率が良い(大きなデータや無限列に向いている)。
使い切り(1度ループしたら空になる)。
インデックスアクセス不可(gen[2] はエラー)。
リスト内包表記とは
nums = [x * x for x in range(3)]
print(nums) # [0, 1, 4]
書き方: [式 for 変数 in イテラブル if 条件]
特徴
書きやすい短縮記法。
リストを返す(= すぐに全要素を生成する)。
リストの生成と「forループ+append」をまとめて書ける。
関連の記事
Python ジェネレータ(generator)
Python ジェネレータとジェネレータ式の違い
Python リストとタプルとディクショナリの違い
