Open5
Python メモ
リスト
空リスト
li = []
print(li)
#[]
要素数nのリスト(すべて同じ値)
n = 3
li = [0]*n
print(len(li)) #リストの長さを出力
#3
二次元
print([[0, 0]] * 2)
#[[0, 0], [0, 0]]
print([[0, 0] for i in range(2)])
#[[0, 0], [0, 0]]
最大値・最小値を得る
li = [0, 1, 2]
print(max(li))
print(min(li))
ソート
sorted()はリストを返す。リスト.sort()はリストがソートされる。
li = [0, 2, 1]
print(sorted(li))
#[0, 1, 2] 昇順リストが返る。
print(sorted(li, reverse=True))
#[2, 1, 0] 降順リストが返る。
順番を逆にする
li = [0, 1, 2]
li = li[::-1]
print(l)
#[2, 1, 0]
ある値が存在するか
li = [0, 1]
print(0 in li)
#True
print(3 in li)
#False
ある値がどこに存在するか
li = [0, 2]
print(li.index(2))
#1 一番若い添字が返る。
要素を削除する
li = [0, 0, 1]
li.remove(0)
print(li)
#[0, 1] 一番若い添字の要素が削除される。
重複している値とその個数を得る
import collections
li = [0, 1, 1]
print(collections.Counter(li).most_common())
#[(1, 2), (0, 1)] タプル(要素の中身, 重複個数)が要素の降順リストが返る。
重複している値をまとめる
li = [0, 0, 1, 1]
print(set(li))
#{0, 1} 順序を持たないsetオブジェクト(集合)が返る。
print(list(set(li)))
#[0, 1] list()でリスト化した。
探索アルゴリズム
二分探索法
昇順リストの真ん中の値と探索したい値を比較し、前後どちらのグループに探索したい値があるか判別するのを繰り返す。
import bisect #二分探索ライブラリ
li = [0, 2, 1]
print(sli := sorted(li))
#[0, 1, 2] 事前に昇順にしておく。
print(bisect.bisect(sli, 2)) #bisect.bisect(昇順リスト, 探索したい値)
#3 何個目の要素かが返る。※添字ではない
加工
リストと文字列を変換
s = 'abc'
sl = list(s) #リストに変換
print(sl)
#['a', 'b', 'c']
print(''.join(sl)) #リストを文字列に変換
#abc
0埋め
n = 10
print('{:0>4}'.format(n)) #{:0>最終的な桁数}
#0010
print(str(n).zfill(4)) #str().zfill(最終的な桁数)
#0010
四捨五入
from decimal import * #十進浮動小数点算術ライブラリ
x = Decimal(0.5) #Decimalオブジェクトにしておく。
print(x.quantize(Decimal('0'), rounding=ROUND_HALF_UP)) #Decimal().quantize(指数, 丸めモード)
#1
n進数の値を10進数に変換
print(int('1010', 2)) #int('値', 進数)
#10
数字をアルファベットに変換
print(chr(97)) #Unicode A:65 ~ z:122
#a
入力
スペースで区切られた値を別々の変数に代入
a, b = input().split()
a, b = map(int, input().split()) #値が整数のとき
#入力:10 20
print('{} {}'.format(a, b))
#10 20
スペースで区切られた値をリストにする
print(list(map(int, input().split())))
#[10, 20]
ビット演算子
print(bin(10 & 2)) #and 10:1010, 2:10
#0b10
print(bin(10 | 5)) #or 10:1010, 5:101
#0b1111
print(bin(10 ^ 15)) #xor 15:1111
#0b101
print(bin(~10 & 15)) #not 補数形式とみなすので、必要桁全てが1のビット列との&をとる。
#0b101
print(bin(10 >> 1)) #右に1bitシフト
#0b101
print(bin(10 << 1)) #左に1bitシフト
#0b10100