Python関連のtipsを,一つ一つ記事にするのは細かすぎるので,ここにまとめておく.
Algorithm
Unique
あるシーケンスについて,ユニークな要素のみを持つシーケンスを作る.
下記コードはStack OverFlowより:
def uniquify(seq):
seen = set()
seen_add = seen.add
return [x for x in seq if x not in seen and not seen_add(x)]
これはおもしろい.束縛されたメソッドだけ触ることができるんだな.
参考情報
- Python Tips:リストから重複した要素を削除したい - Life with Python
- In Python, what is the fastest algorithm for removing duplicates from a list so that all elements are unique while preserving order? - Stack Overflow
Split
あるシーケンスから,長さnずつに区切ったシーケンスを作る.
下記コードはココを参考に:
l = 10
n = 4
zip(*[iter(range(l))]*n)
import itertools
itertools.izip_longest(*[iter(range(l))]*n)
import more_itertools
more_itertools.chunked(range(l), n)
参考情報
Once
ある関数を何度も呼び出したとしても,最初の一回のみその処理を行う.
def run_once(f):
def wrapper(*args, **kwargs):
if not wrapper.has_run:
wrapper.has_run = True
return f(*args, **kwargs)
wrapper.has_run = False
return wrapper
@run_once
def greeting():
print('Hello.')
greeting()
greeting()
greeting()
並列呼び出しの場合は排他的処理が必要になるだろう.上のコードはこれを考慮していない.
そのため,このコードはバッドノウハウとなっている気がする.
TODO: 要改善