LoginSignup
24
32

More than 5 years have passed since last update.

Python 競技プログラミング チートシート自分用

Last updated at Posted at 2018-08-19

はじめに

主にググりながら色々なサイトの演習問題解いて勉強してます。
調べたことをまとめて随時更新したい。

標準入出力

標準入力

1行シリーズ

#1要素を文字列で受け取る
x = input()

#数値にしておく
x = int(input())

#複数要素を分割してそれぞれ文字列として受け取る
#入力例:1 2 3
x,y,z = input().split()

#数値にしておく(map関数)
x,y,z = map(int, input().split())

#分割してリストに入れておく
lis = input().split()

#数値にしてリストに入れておく
lis = list(map(int, input().split()))

map関数の戻り値はmapオブジェクトなのでlist関数が必要な点に注意。
ただし代入式の左辺に適切な数の変数があればそのまま代入できる。
mapオブジェクトに限らず、リストやタプルの要素を展開して
複数の変数に代入することをアンパック代入という。

1+N行シリーズ

1行目に整数Nが与えられて、その後N行の標準入力が続くやつ。
_(アンダースコア)はこの変数使ってないですよ、を表すらしい。

#普通にfor文で回す
num = int(input())
for _ in range(num):
    print(input())

#当然こうも書ける
for _ in range(int(input())):
    print(input())

#N行をリストに入れておきたい場合
lis = []
for _ in range(int(input())):
    lis.append(input())

#内包表記を使ってこう書ける
lis = [input() for _ in range(int(input()))]

#例えば標準入力が以下の場合、
3
2 4
3 9
5 25
#組み合わせてこう書ける
lis = [list(map(int, input().split())) for _ in range(int(input()))]
print(lis)
[[2, 4], [3, 9], [5, 25]]

標準出力

print()関数

基本中の基本。

x,y = 3, 5
#普通に出力
print(x)
3

#','(コロン)区切りで' '(半角スペース)区切りになる
print(x, y)
3 5

#デフォルトで半角スペースになっているsepキーワード引数を変えるとこうなる
print(x, y, sep=',')
3,5

#デフォルトで'\n'(改行コード)になっているendキーワード引数を変えるとこうなる
print(x, end='')
print(y)
35

キーワード引数の指定は'='の両側にスペースを空けないのがお作法です。

str.format()メソッド

文字列に変数を埋め込めるすごいやつ。
組み込み関数のformat()とは違うので注意。

y,m,d = 2018, 8, 20
#基本の使い方
print('Today is {}/{}/{}.'.format(y,m,d))
Today is 2018/8/20.

#埋め込む場所を引数のインデックスで指定も出来る
print('Today is {1}/{2}/{0}.'.format(y,m,d))
Today is 8/20/2018.

#同じ引数のインデックスを何回使ってもいいし使わなくてもいい
print('{1}/{2} {2}:{2}'.format(y,m,d))
8/20 20:20

#ゼロ埋めも出来る
print('Today is {1:0>2}/{2:>2}/{0:0>2}.'.format(y,m,d))
Today is 08/20/2018.

#引数はシーケンス型(リストやタプル)でもいいけどあまりカッコよくはない
print('Today is {0[1]:0>2}/{0[2]:>2}/{0[0]:0>2}.'.format([2018, 8, 20]))
Today is 08/20/2018.

{}内の記法は{"引数の番号[index]":"埋める文字"+"< or = or >"+"桁数"}になる。
※[index]は引数がシーケンス型の場合
'<'が右寄せ '='が中央寄せ '>'が右寄せ。
他にキーワード引数にしたり、n進数にしたりも出来るけど競プロでは余り使わないかも。

str.join()メソッド

指定した区切り文字で要素を連結するのに使う。
大抵は空文字列か半角スペース。
引数はシーケンス型です。

#基本の使い方
print(' '.join(['Hello', 'world', '!']))
Hello world !

#数値は文字列に変換しておく必要がある
print('/'.join(map(str, [2018, 8, 21])))
2018/8/21

#例えばこんな2次元配列を
bingo = [[1, 18, 4, 19, 14], [17, 3, 25, 11, 6], [23, 12, 16, 2, 21], [10, 24, 22, 8, 9], [5, 20, 7, 13, 15]]

#こう書ける
for i in range(len(bingo)):
    print(' '.join(map(str, bingo[i])))
1 18 4 19 14
17 3 25 11 6
23 12 16 2 21
10 24 22 8 9
5 20 7 13 15

#一行にするとこうなる
print('\n'.join([' '.join(map(str, i)) for i in bingo]))
1 18 4 19 14
17 3 25 11 6
23 12 16 2 21
10 24 22 8 9
5 20 7 13 15
24
32
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
24
32