【Python3】AtCoderチートシート

ついに俺も用意しますよ

◇入出力系

# 12 5 2 といったバラバラの値を格納
a, b, c = map(int, input().split())

# 1 2 3 4 5といった数値を格納
a = list(map(input().split()))

# N個の文字を配列Sに格納
S = [input() for _ in range(N)]


◇list, setなど

# listの要素はappendで追加する
l = []
l.append(1)
# l = [1]

# pop(0)で先頭をとれる
# ただし実行時間はO(N)かかるため、可能な限り[0]でアクセスするほうがいい

# listは以下で初期化できる
li = [0]*m # m個の[0]で初期化

# dequeについて
# 要素そのものに対してのアクセス速度は遅い
# 要素が何番目かわかっているならlist、単に両端に対してアクセスしたければdequeをつかう
from collections import deque
d = deque()
d.append("a")  # 右から入れる
d.appendleft("b") # 左から入れる

d,pop() # 右から出す
d,popleft() # 左から出す

# listの重複をsetで消す
a = [1, 2, 3, 4, 5, 5]
l_a = set(a) # ここで重複削除
# l_a = [1, 2, 3, 4, 5]

# 配列のソート
a = [1, 3, 2]
a.sort() # 降順の場合はsort(reverse=True)
# a = [1, 2, 3]

# 文字列の3番目までを出力
a = "asdfg"
print(a[0:3])
print(a[:3])
# asd

# 配列の合計
sum(a)

# キーの存在確認
d = ()
if "key_name" in d:

# for文で使える、添え字含めて取得できる関数
for i, item enumerate(l):

# dict 値の削除
dic={"test":3}
del ["test"]

◇文字列

# 文字列の大文字小文字を変更
str.upper() # strをすべて大文字へ
str.lower() # strをすべて小文字へ

# 空白で区切られた文字列をつなげる -でつなげたければ"-".join(S)
S = ["a", "s", "d"]
p = "".join(S)
# p = asd

# 大文字小文字判定は以下でできる
str = "A"
if (srtr.isupper()):
  print("BIG!")
else:
  print("SMALL!")
# BIG!となる

str = "a"
if (srtr.islower()):
  print("SMALL!")
else:
  print("BIG!")
# SMALL!となる

# 最初が大文字、残りが小文字
str.capitalize()

# 判定系
数字かどうか判定
str.isdecimal(): 全ての文字が十進数字なら真、そうでなければ偽
半角・全角のアラビア数字が真
str.isdigit(): 全ての文字が数字なら真、そうでなければ偽
半角・全角のアラビア数字、特殊数字が真
str.isnumeric(): 全ての文字が数を表す文字なら真、そうでなければ偽
半角・全角のアラビア数字、特殊数字、漢数字が真
英字かどうか判定
str.isalpha(): 全ての文字が英字なら真、そうでなければ偽
便宜上「英字」と書いているが、平仮名やカタカナ、漢字なども真
英数字かどうか判定
str.isalnum(): 全ての文字が英数字なら真、そうでなければ偽
各文字が上のメソッドで真となれば真

◇整数、小数

# 整数はint, 小数はfloat
a = float(input())

# 小数は.で整数と小数を分離する手もあり
# input = 1.22
a, b = map(int, input().split("."))
# a=1, b=22

# 商は//, あまりは%, 普通の割り算は/
a = 23
print(a//5, a%5, a/5)
# 4, 3, 4.6

◇順序付きdict

# 順序つきdict ソートなどができるので便利
from collections import OrderedDict
p = OrderedDict()

# ソートするためのラムダ関数
p_rev = OrderedDict(
    sorted(p.items(), key=lambda x: x[1])
)

# ソートしバリューを順に取り出す、キーを取り出す場合は.keys()
for i in p_rev.values():

◇bit全探索

for i in range(2**n): # nが0 or 1の数
  for j in range(n): # n桁目に対して
    if ((i >> j) & 1):  # 各値が1なら生きる

再帰メモ化

# フィボナッチの例
N = int(input())

dic = {1:1, 2:1}

def calc(x):
  if x in dic:
    return dic[x]
  else:
    dic[x] = calc(x-1)+calc(x-2)
    return dic[x]

print(calc(N))


◇その他便利系

# アルファベットごとの出現回数をカウントするdict
W = {"a":0, "b":0, "c":0, "d":0,"e":0,"f":0,"g":0,"h":0,"i":0,"j":0,"k":0,"l":0,"m":0,"n":0,"o":0,"p":0,"q":0,"r":0,"s":0,"t":0,"u":0,"v":0,"w":0,"x":0,"y":0,"z":0}

# アルファベットと数値を紐づけたdict
W = {"a":1, "b":2, "c":3, "d":4,"e":5,"f":6,"g":7,"h":8,"i":9,"j":10,"k":11,"l":12,"m":13,"n":14,"o":15,"p":16,"q":17,"r":18,"s":19,"t":20,"u":21,"v":22,"w":23,"x":24,"y":25,"z":26}
W = {"A":1, "B":2, "C":3, "D":4,"E":5,"F":6,"G":7,"H":8,"I":9,"J":10,"K":11,"L":12,"M":13,"N":14,"O":15,"P":16,"Q":17,"R":18,"S":19,"T":20,"U":21,"V":22,"W":23,"X":24,"Y":25,"Z":0}

以上