内包表記とlambdaの書き方(結論)
1 | # 内包表記 |
今、数値のリストA
があるとする。A
の要素を全て二乗したリストB
を得る方法を考える。
様々な方法で実装
準備
- 0~99までの要素数100のリスト
A
- 数を二乗する関数
square
1
2
3A = range(100)
def square(a):
return a*a方法1. for文 + square関数
まずは最も愚直な方法を考える。
最初に空のリストを用意して、ループを回して、と手順が複雑。
1 | B = [] |
方法2. map + square関数
高階関数map
を使うと下記のようにシンプルにかける。
Python3では、2までと違いmap
はリストではなくイテレータを返すため、リストへの変換が必要。
1 | B = list(map(square, A)) |
方法3. map + lambda
関数をこの箇所でしか使わない場合、わざわざ宣言をしないという方法もある。
それが、lambda
を用いた方法である。
1 | B = list(map(lambda x: x*x, A)) |
方法4. リスト内包表記
リスト内包表記が最もシンプルだろう。
1 | B = [x*x for x in A] |
おまけ 実行時間の比較
今回のケースでは、内包表記が最も速い。
1 | %%timeit |
1 | %%timeit |
1 | %%timeit |
1 | %%timeit |
listとnumpy.ndarrayの速度比較にも興味がある方は、Pythonにおけるリスト(list)と配列(array)の違いをご覧ください。