LoginSignup
1
0

Paizaでよく使った記法(Python)

Posted at

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文で書いてみます。
(入力値




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]というリストを設定していることになります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0