1510 文字
8 分
【自分用】競プロ用Pythonチートシート&リンク集

自分用。競技プログラミング用のPythonチートシート&リンク集

入力(str)#

#入力値の例:さかな
s=input()
#入力値の例:さかな まぐろ さんま かつお
s=input().split()
#入力値の例:さかな まぐろ さんま
s1,s2,s3=input().split()
#入力値の例:
#さかな
#まぐろ
str_list=[]
for i in range(n):
str_list.append(input())
#入力値の例:
#さかな まぐろ さんま
#かつお いか たこ
str_list=[]
for i in range(n):
str_list.append(input().split())
#文字列を1文字1マスで2次元配列にする
str_list=[]
for i in range(h):
str_list.append(list(input()))

入力(int)#

#入力値の例:1
n=int(input())
#入力値の例:1 2 3 4 5
n=list(map(int,input().split()))
#入力値の例:1 2
n,m=map(int,input().split())
#入力値の例:
#1
#2
int_list=[]
for i in range(n):
int_list.append(int(input()))
#入力値の例:
#1 2 3
#4 5 6
int_list=[]
for i in range(n):
int_list.append(list(map(int,input().split())))

出力(print)#

#文字列を表示
print("ここに表示したい文字列")
#複数の変数の中身を1行で表示
print(s1,s2,s3)
#区切り文字を指定して出力(例はスペース区切りの場合)
#例:0 1 2
ex_list=[0,1,2]
for i in ex_list:
print(i,end=" ")
#区切り文字を指定してリストなどを出力(例はスペース区切りの場合)
#例:0 1 2
ex_list=[0,1,2]
for i in range(len(ex_list)):
ex_list[i]=str(i)
print(" ".join(ex_list))

参考
pythonでリストの要素をスペース区切りで出力したい時 - スズメの本棚

Pythonのprintのendのよくある3つの使い方 | HEADBOOST

if#

if 条件式:
print("A")
elif 条件式:
print("B")
else:
print("AとB以外")

for#

#n回繰り返す(0~n-1)
for i in range(n):
print(i)
#初期値nでmまで繰り返す(n~m-1)
for i in range(n,m):
print(i)
for i in range(n):
#条件に当てはまるとき処理を1周分スキップ
if i==2:
continue
#条件に当てはまるときループを抜ける
if i==5:
break
#xにex_listの中身が順番に入る
for ex in ex_list:
print(ex)
#複数のリストから同時に要素を取得してループを回す(zip(list,list,...))
for ex1,ex2 in zip(ex_list1,ex_list2):
print(ex1,ex2)
#逆順にループを回す(range)
for i in reversed(range(n)):
print(i)
for i in range(n):[::-1]
print(i)
#逆順にループを回す(list)
for ex in reversed(ex_list):
print(ex)
for ex in ex_list[::-1]:
print(ex)

参考
Pythonのbreak文とcontinue文の使い方 | UX MILK

Python, zip関数の使い方: 複数のリストの要素をまとめて取得 | note.nkmk.me

ループを逆順で回す方法 | Python学習講座

Pythonのfor文でインデックスを同時に参照する:enumerate() | UX MILK

zip#

Pythonで2つのリストを関係を保持したままソートする | うどんコード

list#

#listを空で作成(長さ0)
sample_list=[]
#listを初期値ありで作成
sample_list=["s1","s2"]
#listに変換
sample_list=list(s)
#要素を追加
sample_list.append(s)
#listを参照(n=0~len(sample_list)-1)
print(sample_list[n])
#listの長さを取得
len(sample_list)
#listを逆順にする
sample_list.reverse()

参考
Pythonでリストや文字列を逆順に並べ替え(reverse, reversed) | note.nkmk.me

set#

#setを空で作成(長さ0)
sample_set=set()
#setを初期値ありで作成
sample_set={"s1","s2"}
#setに変換
sample_set=set(s)
#要素を追加
sample_set.add(s)

参考
Python | 集合を作成する

listやsetなどに対して合計、最大値、最小値を求める#

#合計
sum()
#最大値
max()
#最小値
min()

文字列操作・検索など(join、find、split)#

#文字列を逆向きにする
reversed_str=''.join(list(reversed(s)))
#文字列に対して特定の文字の位置を取得(0~)
s_index=s.find("example")
#listを文字列にする(この場合は区切り文字なし)
''.join(ex_list)
#文字列をlistにする(引数なしの場合は空白文字で区切る)
s.split()

参考
Pythonでリストや文字列を逆順に並べ替え(reverse, reversed) | note.nkmk.me

Pythonで文字列を検索(〜を含むか判定、位置取得) | note.nkmk.me

Pythonのリストと文字列を相互に変換する方法まとめ | HEADBOOST

in、not in#

#xがyに含まれていたらTrue
if x in y:
print("")
#xがyに含まれていなかったらTrue
if x not in y:
print("")

参考
Pythonのin演算子でリストなどに特定の要素が含まれるか判定 | note.nkmk.me

スライス#

※スライスの”:“の後ろに設定する数字の部分はスライスの範囲に含まれないので注意が必要。(例:[0:5]にした場合0~4(5-1)までが範囲となる)

#すべて
ex_list[:]
#0~4番目
ex_list[:5]
#5~(一番後ろ)番目
ex_list[5:]
#2次元配列(※numpy配列)
#0行目のみ
ex_list[0,:]
#0列目のみ
ex_list[:,0]

参考
Pythonのスライスによるリストや文字列の部分選択・代入 | note.nkmk.me

Pythonのnumpy配列をスライスで行と列の取得をする方法 | ITを使っていこう

ライブラリ#

使ったことがあるライブラリ

numpy#

#インポート
import numpy as np
#listをnumpy配列にする
np_list=np.array(sample_list)
#numpy配列をlistにする
sample_list=tolist(np_list)

参考
NumPy配列ndarrayとPythonのリストを相互に変換 | note.nkmk.me

itertools#

#インポート
import itertools
#順列を生成
p = itertools.permutations(listやsetなど, 選択する個数)
#順列を列挙
for p in itertools.permutations(listやsetなど, 選択する個数):
print(p)

参考

すごいぞitertoolsくん #Python - Qiita

Pythonで階乗、順列・組み合わせを計算、生成 | note.nkmk.me

【Python】リスト内の要素の全ての組み合わせを出力 #標準ライブラリ - Qiita

アルゴリズム#

使ったことがあるアルゴリズム

回文#

最長回文 (Manacher’s algorithm) - yaketake08’s 実装メモ

回文を列挙する #アルゴリズム - Qiita

素因数分解#

Pythonで素因数分解(試し割り法) | note.nkmk.me

累積和#

Pythonで累積和・累積積(itertools.accumulate) | note.nkmk.me

累積和を何も考えずに書けるようにする! #AtCoder - Qiita

同じ文字が連続する部分文字列を見つける正規表現#

同じ文字が N 個以上連続する部分文字列を見つける正規表現 #Python - Qiita

DFS・BFS#

【AtCoder】Pythonで使いこなす深さ優先探索・幅優先探索

【Python】クラスで実装する幅優先探索(BFS)と深さ優先探索(DFS) #AtCoder - Qiita

Pythonで誰でも書けるBFS(幅優先探索)|ぱん

困ったときに見るリンク#

競技プログラミングで解法を思いつくための典型的な考え方 | アルゴリズムロジック

【AtCoder】WAが出た時の対処法(灰色コーダー向け)【競技プログラミング】 #Python - Qiita

【Python版】AtCoderのコンテスト中に「問題が解けない!」となった時に読む記事 #競技プログラミング - Qiita