Ccmmutty logo
Commutty IT
2 min read

Pythonで競技プログラミングをやるときに使う記法まとめ

https://cdn.magicode.io/media/notebox/3fc72237-d4b9-49c3-97c9-fba08eedf3d0.jpeg
はじめまして。
最近、AtCorderをやり始めた万年灰色のアラフォーエンジニアです。言語はPythonを使っています。
競プロって、特殊なコードが多いので慣れるまで大変です。そこで個人的に競プロ時によく使うPythonの記法をまとめていきます。(随時更新予定です。競プロを続けられている限り・・・💧)
Magicodeはコード実行できるので、短いコードを実行することが多い競プロと相性がいいのではと思っています。

入出力

入力

1つの数値

python
a = int(input())
print(a)

3

スペース区切り複数の数値

python
b, c = map(int, input().split())
print(b)
print(c)
スペース区切り入力を配列にする場合 (listをsetにすれば、set型にもできる)
python
a_list:list = list((map(int, input().split())))
print(a_list)

[1, 2, 3]
別法 (上記の法がわかりやすいし応用もしやすいので、使うケースはないと思う)
python
a_list: list = [int(x) for x in input().split()]
print(a_list)

[1, 2, 3]

改行入力

python
# 入力 ex.
# 1
# 3
# 5
a = [int(input()) for i in range(3)]
print(a)  # [1,3,5]

[1, 3, 5]

出力

配列をスペース区切りで出力

python
a = [1,3,5]
print(*a)

1 3 5

配列の中から一番最初に見つかったindexを出力

Mex(Minimum EXcluded Value)などの問題に使える。 (例題 AtCorder 250 B)
python
has_nums = [True, True, False, True, False]
print(has_nums.index(False))

2

booleanからYes/Noの文字列を出力

Pythonの三項演算子は見づらいので、あまり使いたくないが、これぐらいはパッと使えるようにしたほうが良さそう。
python
is_ok = True
print("Yes" if is_ok else "No")
is_ok = False
print("Yes" if is_ok else "No")

Yes No

配列

連番配列を用意

python
a = list(range(5))
print(a)

[0, 1, 2, 3, 4]

最小値/最大値とindexを取得

python
# 配列の最大値の値とindexを取得
# 最小値はmaxをminにする
l = [4, 9, 8, 19, 12]
m = max(l)
print(m)
print(l.index(m))

19 3
max, minは複数のintから最大値/最小値を得るのにも使用できる。
python
a, b = 2, 5

# いまいちな書き方
tmp = 0
if a < b:
  tmp = b
else:
  tmp = a
print(tmp)

# シンプルな書き方
print(max(a, b))

要素削除

python
# index指定の削除
l = [4, 9, 8, 19, 12]
l.pop(1)
print(l)

ループ

range

python
# rangeは配列インデックスと同じ (start:0, end:引数-1)
for i in range(5):
  print(i)

print("------")

# start指定パターン
for i in range(2,5):
  print(i)

0 1 2 3 4 ------ 2 3 4

enumerate

python
l = ["a","b","c"]
for i, v in enumerate(l):
  print(i, v)

0 a 1 b 2 c

Discussion

コメントにはログインが必要です。