1
0

More than 3 years have passed since last update.

python3 競技プログラミング小技集

Last updated at Posted at 2020-10-29

はじめに

paiza取り組んでます。
自分用のメモです。
これからも追記していきます。

2020/11/12 追記
paizaは答えがないのでCodewarsをやってます。

Sign in | 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)

1
0
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
1
0