map関数の使い方
書式
map(適用する関数, イテレータ)
適用する関数はint,strのほかに自作した関数も含みます。
イテレータはリスト、タプル、文字列などイテラブル(繰り返し処理ができるもの)です。
map関数を適用した後、新しいオブジェクト(map関数適用後のデータ)が返されます。
そのオブジェクトをlistやtupleで再度ひとまとめにして使用したり、別々の変数に代入して個別に使用することができます。
文字列型のリスト・タプルを全て数値に変換してリストに代入
1 2 3 4 5 6 |
numbers = ["1","2","3"] #list関数を使ってリストとして扱うことができる numbers_int = list(map(int, numbers)) print(numbers_int) #[1,2,3]map関数を適用するとオブジェクトを生成する。 |
map関数を適用後、listやtupleなどで変換することで使用することができる。
文字列型のリスト・タプルを全て数値に変換し、複数の変数に代入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#要素の数だけ変数を用意してそれぞれに代入することもできる one, two, three = map(int, numbers) print(one, two, three) #1 2 3 #*を使うとその変数に複数の値を入れることができる(変数名はなんでも良い) a, *bc = map(int, numbers) print(a, *bc) #1 2 3 print(a) #1 print(*bc) #2 3 #1つ目の変数に*を付けると、後の変数の数に合わせて複数個代入してくれる。 *ab, c = map(int, numbers) print(*ab) #1 2 print(c) #c print(*ab,c) #1 2 3 |
要素の数だけ変数を用意することで、それぞれの変数に値を代入することができる。
また、” * “を使うことで1つの変数に複数の値を入れることができる。
自作 関数を適用する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#関数を定義(つまり作成)する def square(x): return x**2 numbers = [1,2,3] #第一引数に定義した関数squareを使い、map関数を適用 squared_numbers = list(map(square, numbers)) print(squared_numbers) #[1,4,9] #無名関数を使うこともできる numbers = [1,2,3] squared_numbers = (list(map(lambda x:x**2, numbers))) #[1,4,9] |
map関数はリストやタプルなどのイテラブルに対して別の関数を適用することができます。
先ほどの例ではint()関数を適用しましたが、そのほかstr()を適用することもできれば、自作関数を適用することができます。
また、無名関数を適用することもできる。
複数のイテレータを組み合わせる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#数値型の要素を持つイテレータを2つ用意 numbers1 = [1,2,3] numbers2 = [4,5,6] #2つのイテレータの各要素を足し算 numbers_int = list(map(lambda x,y:x+y, numbers1, numbers2)) print(numbers_int) #[5,7,9] #文字列のイテレータを2つ用意 numbers_str1 = ["1","2","3"] numbers_str2 = ["4","5","6"] #2つのイテレータの各要素を結合 numbers_str = list(map(lambda x,y:x+y, numbers_str1, numbers_str2)) print(numbers_str) #["14","25","36"] |
2,3個目の引数に複数のイテレータを渡すこともできます。
1つ目の例では2つの数値型の要素を持つリストを用意し、各要素を足し算して”numbers_int”の各要素としました。
2つ目の例では2つの文字列型の要素を持つリストを用意し、各要素を結合して”numbers_str”の各要素としました。
2つ目の例では、以下のように2つ同時にint関数を適用したかったのですが、それはエラーになりました。
“numbers_str = list(map(int, numbers_str1, numbers_str2))”
Atcoderで入力を受け取る
1 2 3 4 5 6 |
#入力:"1 2 3" numbers = list(map(int, input().split())) numbers = tuple(map(int, input().split())) one, two, three = map(int, input().split()) |
Atcoderでは入力は空白区切りで受け取るので、input関数、split関数と組み合わせて上記のように値を受け取ることができます。
まとめ
map関数の使い方を整理しました。
Atcoderの入力によく使うので覚えておくと便利だと思います。
コメント