Python ではリストや辞書の各要素に対して同じ処理を実行して新たなリストを生成するときに,for
ループを書く代わりに内包表記を使うことができる.たとえば,values
リストの各要素を3倍して新たな results
リストを生成する処理を for
ループを使って記述すると次のようになる.
# リストを3倍する
values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
results = []
for v in values:
results.append(v * 3)
print(results)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
上の処理をリストの内包表記を使うと,次のように記述することができる.
# リストを3倍する内包表記
values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
results = [v * 3 for v in values]
print(results)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
さらに,奇数だけ取り出して3倍するには,次のように書くと良い.
# 奇数だけを3倍する内包表記
values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
results = [v * 3 for v in values if v % 2 == 1]
print(results)
[3, 9, 15, 21, 27]
上のような内包表記を使う利点のひとつは,プログラムが短くなり読みやすくなること,もうひとつは,内包表記を使うことで処理速度が向上することである.実際に速くなるかどうかは,各自で試してみよう.ここで NumPy との比較も行っていますが,NumPy の方がさらに高速です.