モブプロな人たちのブログ

横浜で Web サービス開発しているエンジニアの日記です。Python 大好き Flask 大好き。たまに SpriteKit でゲーム開発も。

Python で map や filter の代わりにリスト内包表記を使う

「Effective Python」を久しぶりに読み返して、当時は特に何も思わなかった箇所に引っかかったのでメモを残しておきますシリーズ第2弾。

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

Python で map や filter の代わりにリスト内包表記を使う

うん、めちゃくちゃ map 使いますね。いや、めちゃくちゃは言い過ぎかもしれません。たまに使います。

リストに対して何かするとき、基本的にはリスト内包表記でなんとかするんですが、たまに何を思ったか map でガチャガチャしてしまうときがあります。(paiza とかで遊んでる時は特に。)

リスト内包表記の方が良い理由はとてもシンプルで、

  • 何か処理を施す時に lambda 式が必要ないので、見た目がごちゃごちゃしない
  • リストから要素を抜き出すのが簡単 (map の場合、filter が必要になる。)

といったところです。

例えば、スペース区切りの数字を文字列として受け取り、それらに5を足した数値をリストにしたい時、

input_string = '10 20 30'

# map の場合
numbers = list(map(lambda s: int(s) + 5, input_string.split()))
print(numbers) #=> [15, 25, 35]

# リスト内包表記の場合
numbers = [int(s) + 5 for s in input_string.split()]
print(numbers) #=> [15, 25, 35]

スッキリしますね、はい。