組み立てのためのループを表現力のある内包表記に置き換え、データを変換し、絞り込み、インデックスを付け直しましょう。
このレッスンを Kodokon で開くリスト内包表記は、プログラミングで最もよく使うパターンを凝縮します。つまり、並びを変換したり絞り込んだりしてリストを組み立てることです。その記法は一つの文のように読めます。[expression for element in sequence if condition]です。appendを使ったループと同じ結果を、宣言的な一行で書けます。Pythonの開発者なら誰でも一目でわかる書き方です。
prices = [12.0, 49.9, 5.5, 199.0]
with_tax = [round(p * 1.2, 2) for p in prices]
cheap = [p for p in prices if p < 50]
print(with_tax) # [14.4, 59.88, 6.6, 238.8]
print(cheap) # [12.0, 49.9, 5.5]辞書内包表記は同じ論理を{key: value for ...}という記法でたどります。プロジェクトでとてもよくある用途は、オブジェクトのリストを識別子で索引し直すことです。そうすれば、必要になるたびにリストを走査する代わりに、すぐに引けるようになります。
users = [
{"id": 7, "name": "Alice"},
{"id": 12, "name": "Bruno"},
{"id": 31, "name": "Chloe"},
]
by_id = {u["id"]: u["name"] for u in users}
print(by_id[12]) # Bruno
print(31 in by_id) # Trueifの置き場所は二つ、役割も二つです。forのあとに置くと絞り込みます。はじかれた要素は結果に現れません。forの前に条件式(a if condition else b)として置くと、要素ごとに値を選びます。このときリストの長さは元のままです。
scores = [45, 82, 67, 91]
labels = ["pass" if s >= 60 else "fail" for s in scores]
print(labels) # ['fail', 'pass', 'pass', 'pass']