PSM

Pプログラミング S初心者の Mメモ書き

競プロ用メモ

python競技プログラミングの問題を解いていて,テクニックをまとめました.
ちょくちょく使うのに覚えてなくて,その度になんだっけって調べるやつです.

文字列を1文字ごとのリストに変換する

list()をかませるだけ

print(list("letters"))
['l', 'e', 't', 't', 'e', 'r', 's']

リストを1つの文字列に変換する

ほかのとこでも書いた気がする.joinを用いるのが定石.

l = ['l', 'e', 't', 't', 'e', 'r', 's']
print("".join(l))
letters

リスト内の要素の個数を数える

collectionsを使うのが早いし簡単らしい.

a = [1,2,3,5,2,1,3,4]
import collections
c = collections.Counter(a)

数えた結果は以下のように呼び出せる.

print(c)
print(c[2])
print(c.keys())
print(c.values())
Counter({1: 2, 2: 2, 3: 2, 5: 1, 4: 1})
2
dict_keys([1, 2, 3, 5, 4])
dict_values([2, 2, 2, 1, 1])

英小文字,英大文字のリストの作り方

アルファベットって何文字あるんだか,たまにわからなくなる.

lowl = [chr(i) for i in range(97, 97+26)]
uppl = [chr(i) for i in range(65, 65+26)]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
 ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

二次元リストをフラットにする

itertoolsを用いると早い.

l = [[1,2,3], [4,5,6]]
from itertools import chain
flatten_l = list(chain.from_iterable(l))
[1, 2, 3, 4, 5, 6]