Pythonでよく使う変数や関数のメモ
この記事はPythonでよく使う変数の扱いや、忘れやすい関数を忘備録的にメモした記事になります。
文字列が含まれているかどうか判定したい
特定の文字が含まれてるかどうかの判定は 検索文字 in ターゲット を使う。
py
if 'world' in "Hello world!":
print("worldが含まれている")
辞書から値が含まれているキーを抽出したい
まず、こんな感じの辞書を用意しておく。
py
dic = {
'programming': ['android','c','css','python','swift','kotlin'],
'gardening': ['hydroponics','planter'],
'iot': ['raspberry_pi','arduino'],
'analog': ['speaker', 'electric_circuit'],
'posts': ['localize','hotsand','camp'],
}
この辞書の中からたとえば、pythonの文字列が含まれているキーを見つけたい場合は、次のように書くことができる。
py
for key, array in dic.items():
if "python" in array:
print(key)
配列を文字で分割結合したい
分割する場合
split() を使うとテキストを特定の文字で分割して、配列にすることができる。py
arr = text.split(',')
結合する場合
join()を使うと配列を特定の文字でつなげて、テキストに変換できる。py
text = ','.join(arr)
文字を置換する
文字を指定して置換: replace()
replace()を使うと、置換したい文字と完全一致した場合に置換される。py
s = 'Hello world!'
s.replace('world', 'Python')
# Hello Python!
正規表現で置換: re.sub()
re.sub() を使うと置換したい文字を正規表現でマッチさせることができる。py
import re
s = 'Hello world!'
re.sub('[a-z]*!', 'Python!', s)
# Hello Python!
特定の文字を抽出したい
URLを抽出する: findall()
findall() を使うと正規表現にマッチしたすべての文字列を配列として抽出することができる。たとえば次の文章を、変数 text として用意する。
Androidの公式ドキュメント よりダイアログの表示サンプルを試してみた。ドキュメントではJavaで記述されているがここではKotlinに書き直して実装した。
なお、本プロジェクトはGithubリポジトリへ公開してある。AndroidExercise/TryDialog at master · araemon/AndroidExercise · GitHub
この中からすべてのURLを取り出したい場合、次のようにして抽出することができる。
py
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.stat の st_mtime を使う。
py
st = os.stat('item_apps.html')
print(st.st_mtime) #最終変更日タイムスタンプ
下限から上限の範囲で数値を収めるclamp関数
py
def clamp(n, smallest, largest):
return max(smallest, min(n, largest))
shell
>>> clamp(0.3, 0, 1)
0.3
>>> clamp(1.5, 0, 1)
1
>>> clamp(-3, 0, 1)
0
xy座標における二つのポイントの距離判定
py
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色空間の値へ変換する
py
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 |