Python備忘録

スポンサーリンク

個人的なPythonメモ帳。人の役に立つかどうかは不明。随時更新。過去に自分が書いたコードを見返すと自分自身が書いたとは思えないものが書いてある。初心者の学習メモなので変なことが書いてある可能性が高い。

四捨五入するときにいわゆる「銀行丸め」になって誤差が生じる問題を回避する簡易テクニック(多分これでイケる気がする)

num = int(((num * 2) + 1) // 2)

イテラブルの中身を一括でチェックするのに便利な方法 all, any。
例:リストtmpの各要素がR以上か否かをチェックするif文

if all([j >= R for j in tmp]):

未定義の変数を実行しようとすると出るエラーを使って例外処理を絡ませる(ここではaが未定義)

try:
    print(a)
except NameError as e:
    print('not found')

リストの中身を連結してstrとして出力したい場合に使うjoin

tmp1 = [] 
tmp2 = ' '.join(tmp1)
print(tmp2)

# list(=l1)の中身がstrではない場合
tmp3 = ' '.join([str(_) for _ in l1])

辞書の中でvaluesが最大値のkeyだけを抽出してリストに格納する(ここではkv[0]がkey、kv[1]がvalues)

max_k_list = [kv[0] for kv in dct.items() if kv[1] == max(dct.values())]

無駄な行数を減らす小技

a, b = 0, 1
print(a, b)

辞書からvalueが最大のkeyを全て(複数)取得したい場合、以下の2つは同じ意味(処理速度未検証)

max_val = max(dct.values())
max_keys = [k for k, v in dct.items() if v == max_val] # 1例目
max_keys = [k for k in dct if dct[k] == max_val] # 2例目

文字列を入れる空の変数を作る

empty_string = ''

2つの変数を入れ替える方法

a, b = b, a

標準入力から受け取った文字列を1文字づつ分割してリストに入れる

lst1.append(list(input()))

10進数を2,8,16進数に変換する。またその逆。

x = 10
print(bin(x))
print(oct(x))
print(hex(x))

print(int('10100', 2))
print(int('24', 8))
print(int('14', 16))

アルファベットが絡む処理をするときは import string が便利かもしれない。

import string

print(string.ascii_lowercase) 
print(string.ascii_uppercase)
print(string.ascii_letters) # 小文字と大文字を合わせたもの

リスト内包表記を使って2行で二重リストを作る

tmp = ['.' for _ in range(w)]
lst = [tmp for _ in range(h)]

条件判定等の為に無限大を使う場合

count = float('inf')
if count == float('inf')
    pass

2重リストを一行で作る方法

square = [[int(m) for m in input().split()] for _ in range(n)]

以下のABは同じものを返す

x = '8 7 9 1 5 6 2 10 4 3'

A = [int(_) - 1 for _ in x.split()]
B = list(map(lambda x: int(x) - 1, x.split()))

10進数(n10)をn進数(x)に変換

def from_10_to_x(n10, x):
    if n10 // x > 0:
        return from_10_to_x(n10 // x, x) + str(n10 % x)
    return str(n10 % x)

# これと同じ(はず)
s = ''
while n10 > 0:
    s = str(n10 % x) + s
    n10 = n10 // x

tryとexceptを使ってEOFでループ終了

while True:
    try:
        get_input = input()
    except EOFError:
        break

アルファベットをカウントする辞書を作る

l1 = list('abcdefghijklmnopqrstuvwxyz')
d1 = {}
for i in range(26):
    d1[l1[i]] = 0

import string で文字列を数字を取得

import string

ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
digits = '0123456789'

アスタリスク(*)を使ってlistをアンパックすると便利

l1 = [0, 1, 22, 303]
print(*l1)
> 0 1 22 303

関数アノテーション(参考記事

def sample_function(text: str = text) -> list:
# 引数に期待する型は引数の後にコロン。
# 戻り値に期待する型は引数の閉じカッコの後に矢印 ->。

コメント

当ブログのコンテンツが気に入ったら広告ブロックの解除(ホワイトリスト化)をご検討下さい。

Please disable your adblocker or whitelist this site!

タイトルとURLをコピーしました