Pythonでよく使う小技メモ

Pythonでよく使う小技メモ

この記事では「Pythonでよく使う変数の扱いや忘れやすい関数」などを忘備録的にメモしておく。

文字列が含まれているかどうか判定したい

特定の文字が含まれてるかどうかの判定は 検索文字 in ターゲット を使う。

if 'world' in "Hello world!":
    print("worldが含まれている")

辞書から値が含まれているキーを抽出したい

まず、こんな感じの辞書を用意しておく。

dic = {
    'programming': ['android','c','css','python','swift','kotlin'],
    'gardening': ['hydroponics','planter'],
    'iot': ['raspberry_pi','arduino'],
    'analog': ['speaker', 'electric_circuit'],
    'posts': ['localize','hotsand','camp'],
}

この辞書の中からたとえば、pythonの文字列が含まれているキーを見つけたい場合は、次のように書くことができる。

for key, array in dic.items():
    if "python" in array:
        print(key)

配列を文字で分割結合したい

分割する場合

split() を使うとテキストを特定の文字で分割して、配列にすることができる。

arr = text.split(',')

結合する場合

join()を使うと配列を特定の文字でつなげて、テキストに変換できる。

text = ','.join(arr)

文字を置換する

文字を指定して置換: replace()

replace()を使うと、置換したい文字と完全一致した場合に置換される。

s = 'Hello world!'
s.replace('world', 'Python')

# Hello Python!

正規表現で置換: re.sub()

re.sub() を使うと置換したい文字を正規表現でマッチさせることができる。

import re

s = 'Hello world!'
re.sub('[a-z]*!', 'Python!', s)

# Hello Python!

特定の文字を抽出したい

URLを抽出する: findall()

findall() を使うと正規表現にマッチしたすべての文字列を配列として抽出することができる。

たとえば次の文章を、変数 text として用意する。

Androidの公式ドキュメント(https://developer.android.com/guide/topics/ui/dialogs?hl=ja)よりダイアログの表示サンプルを試してみた。ドキュメントではJavaで記述されているがここではKotlinに書き直して実装した。

なお、本プロジェクトはGithubリポジトリへ公開してある。https://github.com/araemon/AndroidExercise/tree/master/TryDialog

この中からすべてのURLを取り出したい場合、次のようにして抽出することができる。

import re

pattern = "https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"
re.findall(pattern, text)

# ['https://developer.android.com/guide/topics/ui/dialogs?hl=ja', 'https://github.com/araemon/AndroidExercise/tree/master/TryDialog']

ファイルの最終変更日を取得したい

ファイルの最終変更日を取得するには os.statst_mtime を使う。

st = os.stat('item_apps.html')
print(st.st_mtime) #最終変更日タイムスタンプ

下限から上限の範囲で数値を収めるclamp関数

def clamp(n, smallest, largest):
    return max(smallest, min(n, largest))
>>> clamp(0.3, 0, 1)
0.3

>>> clamp(1.5, 0, 1)
1

>>> clamp(-3, 0, 1)
0

xy座標における二つのポイントの距離判定

def is_nearby(pt1, pt2): # pt -> (x, y)
    if (pt1[0] - pt2[0])**2 + (pt1[1] - pt2[1])**2 < 2000:
        return True
    return False

この関数は、次の記事のジェネラティブアートで使ってます。

RGBからOpenCVで扱えるHSV色空間の値へ変換する

def rgb2hsv(rgb):
    r,g,b = rgb
    h,s,v = colorsys.rgb_to_hsv(r, g, b)
    return int(h*180), int(s*255), int(v)
記号 意味 値の範囲
h 色相 0~180
s 彩度 0~255
v 明度 0~255
YouTubeで モノ作りチャンネル料理チャンネルベースチャンネル 始めました!
記事に関するご質問などがあれば、
Twitter または お問い合わせ までご連絡ください。
Python学習にオススメの本をご紹介!
Pandasでデータサイエンスはじめよう!
関連記事