Open5

Python メモ

gragra

リスト

空リスト

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()でリスト化した。
gragra

探索アルゴリズム

二分探索法

昇順リストの真ん中の値と探索したい値を比較し、前後どちらのグループに探索したい値があるか判別するのを繰り返す。

import bisect   #二分探索ライブラリ
li = [0, 2, 1]
print(sli := sorted(li))
#[0, 1, 2] 事前に昇順にしておく。
print(bisect.bisect(sli, 2))    #bisect.bisect(昇順リスト, 探索したい値)
#3 何個目の要素かが返る。※添字ではない
gragra

加工

リストと文字列を変換

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
gragra

入力

スペースで区切られた値を別々の変数に代入

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]
gragra

ビット演算子

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