4章内包表記とジェネレータ

多くのプログラムがリスト、辞書、キー値対、集合を処理するよう構築されています。Pythonは内包表記と呼ばれる特別な構文で、これらの型で簡潔にイテレーションしたり、派生データ構造を使えるようにします。内包表記は、このようなよくある処理コードを読みやすくするだけでなく、他にも多くの利点があります。

この処理スタイルは、ジェネレータ関数にも拡張できて、関数により値のストリームを順に返すことができます。ジェネレータ関数の呼び出しの結果は、イテレータを使えるところならどこでも使えます(例:forループ、アスタリスク付きの式)。ジェネレータは、性能を向上し、メモリ使用を減らし、可読性を高めます。

項目27 mapやfilterの代わりにリスト内包表記を使う

Pythonは、他のシーケンスやイテラブルオブジェクトからリストを導出するための簡潔な構文を備えています。この式は、リスト内包表記と呼ばれます。例えば、リスト中の各数の平方を計算したいとしましょう。次は、これを簡単なforループで行います。

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squares = []
for x in a:
    squares.append(x**2)
print(squares)

>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

リスト内包表記では、ループする入力シーケンスに計算式を指定すれば、同じ結果が得られます。

squares = [x**2 for x in a] # リスト内包表記
print(squares)

>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Get Effective Python 第2版 ―Pythonプログラムを改良する90項目 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.