何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

『Effective Python』Item 7: mapやfilterの代わりにリスト内包を使おう

『Effective Python』の続き。まさかの連投。

Effective Python: 59 Specific Ways to Write Better Python (Effective Software Development Series)

Effective Python: 59 Specific Ways to Write Better Python (Effective Software Development Series)

www.effectivepython.com

リスト内包とmap/filterはどちらが先に登場したのだろうか。PEP 202 - PEP 202 -- List Comprehensions | Python.orgを見るとリスト内包が後のように思われる。 https://hg.python.org/cpython/raw-file/v2.0.1/Misc/NEWSを見る限りPython2.0から登場したらしい。 入門書だとリスト内包は難しいから…と誤魔化しているのもあったりするが、そんなに難しくは無いと思う。

平方のリストを作りたい、という場合、

よくある方法

squares = []
for x in range(10):
    squares.append(x**2)

print(squares)

map/filterで頑張った例

squares = list(map(lambda x: x**2, range(10)))
print(squares)

リスト内包

squares = [x**2 for x in range(10)]
print(squares)

となるが、リスト内包が一番シンプルだしわかりやすい。

map(lambda x: x**2, filter(lambda x: x % 2 == 0, a))

と書いてあって一体何をしているのかすぐわかるだろうか、という話である。