はじめに
paiza取り組んでます。
自分用のメモです。
これからも追記していきます。
2020/11/12 追記
paizaは答えがないのでCodewarsをやってます。
競プロ用 技メモ
入力の配列格納処理
# 入力を分割して配列に格納
x, y, z = [int(x) for x in input_line.rstrip().split()]
print(x + y + z)
# 入力を分割せず配列に格納
tem = [int(n) for n in input_line.replace(' ', '')]
# 複数行の入力
input_ = [input() for i in range(len_)]
# 辞書型に格納
input_ = int(input())
dic = {input_[i].split()[0]: int(input_[i].split()[1]) for i in range(len(input_))}
配列のソート
# reverse=Trueで降順
nums = sorted(input_line, reverse=True)
# listの逆順
# num = [1, 2, 3, 4]
print(num[::-1])
# [4, 3, 2, 1]
for文
# カウンタと要素でループ
for i, s in enumerate(input):
for文のelse
- elseの中はfor文から抜ける時に実行される
- 途中でbreakした場合は実行されない
for i in range(3):
if i == 3:
break
else:
print('a')
辞書型のfor文
# {'1': 0, '2': 0, 'neutral': 100}
for key, value in elect.items(), #keys(), values()
リスト内包表記を使ったあれこれ
特定のデータの条件をカウント
data = range(1, 10)
count = len([x for x in data if x % 3 == 0]) # 3の倍数をカウント
print(count)
二重のリストをフラット
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(data)
flat = [flatten for inner in data for flatten in inner]
print(flat)
実行
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
リスト回りの操作
数値を桁ごと格納
12345 -> [1,2,3,4,5]
[1,2,3,4,5] -> 12345
# 12345 -> [1,2,3,4,5]
n = [int(x) for x in list(str(num))]
# [1,2,3,4,5] -> 12345
num = int(''.join([str(x) for x in n]))
# 135687 -> 876531
n = int("".join(sorted(str(num), reverse=True)))
末尾指定
a = [1, 2, 3, 4, 5]
print(a[len(a) - 1]) # よくある末尾の指定
print(a[-1]) # マイナス値のインデックスを使った末尾の指定
print(a[-2]) # 末尾から2番目
実行
5
5
4
スライス
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[3:7])
print(a[3:]) # 終点の省略
print(a[:7]) # 始点の省略
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[2:8:2])
# 2番目以上8番目未満を2step(1つ飛ばし)で取得
文字列定数
print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.ascii_letters)
print(string.digits)
print(string.hexdigits)
実行
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
0123456789abcdefABCDEF
辞書型のあれこれ
アルファベットと数値の対応表
lis = {s: str(i+1) for i, s in enumerate(list(abc))}
# {'a':1, 'b':2, 'c':3, …… }
小技
文字列の判定
# アルファベット判定
if str.isalpha()
# 数値判定
if num.isdigit()
割り算のエラー処理
ループで割り算してたらキーが存在しないときエラー対処
try-exceptを使えば無理やりできる
count = []
for k in b_dic.keys():
try:
temp_count = a_dic[k] / b_dic[k]
# math.floor:小数点以下切り捨て
count.append(math.floor(temp_count))
except KeyError:
count.append(0)
参考
Pythonで競プロやるときによく書くコードをまとめてみた
(https://qiita.com/y-tsutsu/items/aa7e8e809d6ac167d6a1)