map
この記法では2 3
のような入力(個数が決まっていて間にスペースがあるような入力)の時によく使いました。
例として、上記のような2 3
といった入力があったとします。
mapを使わないで書いてみましょう。
input_line = input() #string形式で"2 3"といった形式で格納される。
n = int(input_line[0]) #"2"を格納
m = int(input_line[2]) #"3"を格納 ※"2 3"では間にスペースが入っている
print(n,m) #「2 3」と出力される。
なんだかinput_lineが無駄に見えますね。
mapを使ってみます。
n,m = map(int, input().split())
print(n,m) #「2 3」と出力される。
シンプルです。(以下解説)
mapの書き方はこのような形↓
map(型,入力(カンマ区切り文字列))
今回の場合は2 3
ということなので格納したい型は数値
ですね
と、いうことはint
で格納したいわけです。
よって2 3
という入力の場合は
n,m = map(int, input().split())
print(n,m) #「2 3」と出力される。
となるわけです。
split()とは
上記の記法で謎の関数split()
が存在していますね。
これは色々な使い方がある関数なのですが、今は文字列をカンマ区切りで分割してリスト化する関数
という感覚で良いでしょう。
なので2 3
という文字列は数値 空白 数値
という並び順ですので数値
,数値
という文字列に変更されるわけです。
以下は例↓
split_str = input().split()
# 入力値は"2 3"
print(split_str)
# 出力は["2", "3"]
リスト内包表記
例えばの話、こんな入力が繰り返される(何個入力されるかはわかっている状態)場合があります。
380
390
400
410
420
380
400
420
440
451
380
380
380
380
389
まぁこれを入力値として扱うためには色々方法がありますね。
- 全部
n = int(input())
で格納する - for文で繰り返す
まぁ普通思い浮かぶのはこんなところでしょう。
例としてfor文で書いてみます。
(入力値
1
2
3
4
5)
input_list = []
for i in range(5):
input_list.append(int(input()))
print(input_list) # 出力「1,2,3,4,5」
行っている処理としてはListに加える動作をfor文で繰り返すというもの。
これはシンプルな文に見えますが、入力されたデータをListにまとめるためだけにfor文の処理を繰り返すのは見栄え的にも、処理的にも好ましくありません。
そこで行うのがリスト内包表記
です。
同じ処理をリスト内包表記で書くと以下のような感じ。
input_list =[input() for i in range(5)]
一行で済みましたね。
どんな決まりかというと↓
[繰り返したい処理 for文]
これだけです。
上手く使うとこんなふうにできます。
num_list = [1,2,3,4,5]
input_list = []
for i in num_list:
input_list.append(i)
#↓↓↓↓↓↓↓↓↓これをリスト内包表記で書くと?
num_list = [1,2,3,4,5]
input_list = [i for i in num_list]
これらはいずれもinput_list
の中身に[1,2,3,4,5]
というリストを設定していることになります。