Python3 ~map関数について~
今回は map()関数 についてお話します。
簡単に言うと、リストやタプルなどのシーケンスに対してmap(a, b) はbに対してaしたものを返す。ということです。
たとえば
def double(n): return (int(n) * 2) lis = ["114514", "810", "893"] print(list(map(double, lis))) # [229028, 1620, 1786]
というように、全ての要素を引数として読み込みそれぞれ"114514", "810", "893"に対して ×2をして返します。
分岐・ループ
lis = ["1024", "23", "16", "256", "1", "32"] def beautify(n): m = format(int(n), "b") if m == "1" + "0" * (len(m) - 1) and n != "1": return n else: return '1024' # 2の累乗数ならそのままreturnし、そうでないなら最も美しい数をreturnする。 print(list(map(beautify, lis))) # ['1024', '1024', '16', '256', '1024', '32']
というように、分岐やループが入っているようなものも可能です。
lambda式
あるいはlambda式も使えますので
lis = ["114514", "810", "893"] print(list(map(lambda n:int(n)*2, lis))) # [229028, 1620, 1786]
というようにも扱えます。
ですが、map関数を使おうとしてできることは、大方リスト内包表記も使えます。そちらのほうがほとんどの場合高速なので、リスト内包表記を使うほうが良いと個人的に思います。
lis = ["114514", "810", "893"] print([int(n) * 2 for n in lis]) # [229028, 1620, 1786]
ちなみに、このmap関数が返すのはmap型です。これ自体を直接見ることはできないので、毎回list()としてリストに変換しています。