2013-08-06
■集合に含まれているか探す
プロファイラを使うべきだけど横着。
- ソート済みのlistを2分探索
- ソートされていないlistのin演算子
- dictのin演算子
- dictのgetメソッド
- setのin演算子
を調べた。
dictとsetのin演算子が速い。setの方がいつもちょっとだけ速い。dictを使うのはバッドノウハウで、意図通りのコードになるsetを使うべき。
import bisect from datetime import datetime import random def index(a, x, l): """Locate the leftmost value exactly equal to x""" i = bisect.bisect_left(a, x) return i != l and a[i] == x if __name__ == '__main__': SIZE = 10000 i = [x * 2 for x in range(SIZE)] a = datetime.now() for idx in xrange(SIZE * 2): if index(i, idx, SIZE): pass b = datetime.now() print b - a random.shuffle(i) a = datetime.now() for idx in xrange(SIZE * 2): if idx in i: pass b = datetime.now() print b - a d = dict([(x, 1) for x in i]) a = datetime.now() for idx in xrange(SIZE * 2): if idx in d: pass b = datetime.now() print b - a a = datetime.now() for idx in xrange(SIZE * 2): if d.get(idx): pass b = datetime.now() print b - a s = set(i) a = datetime.now() for idx in xrange(SIZE * 2): if idx in s: pass b = datetime.now() print b - a
0:00:00.022995 0:00:03.421239 0:00:00.002715 0:00:00.005084 0:00:00.002595
というメモ。
2013-08-07
2013-08-08
2013-08-12
2013-08-28
2013-08-29
■マネーボール
すごく痛快で面白かった。
金満球団と渡り合うために「他の球団の評価が低い選手たち」の中から、「安くて」「勝てる」選手を選択する必要にせまられた球団のゼネラルマネージャー。
ひどく曖昧で妥当性が薄い尺度で選手を評価し続ける野球界にあって、はたして彼は何をもって選手を評価し、チームを作り、思想を浸透させていったのか。
その様はひどく痛快だ。
"アウトにならない割合"が高い選手が評価できる選手である。
出塁した内容はなんだってもいい。四球でもヒットでも同じなのだ。
極端に言えばシングルヒットでもホームランでもさほど変わりはない。
なぜならとにかくアウトになりさえしなければ——3アウトにならないかぎり——攻撃は続くのだから。
というのが根本のところ。
なぜそう考えるに至ったのか、その源泉はどこにあったのか。
また、その方針でチームを作ったおかげで人生が変わった(あるいは、変えられた)人たちがいる。その人たちが辿った軌跡が描かれている。
一人の男にスポットをあてながらも、半分は群像劇のようでもある。
その様は、凡百の小説を超えている。
あとがきから
メジャーリーグの球団はビジネスではなく、社交クラブなのだから……。ビジネスであれば、効率に秀でたライバルがもし商売の秘訣を打ち明けてくれたら、大喜びだろう。眉唾ものだと感じたにせよ、本を手に取り、中身をのぞいてチェックするはずだ。多少は検討してみるにちがいない。ところが、ベースボールでは違う。ベースボールの世界では、誰もが激怒した。社交クラブにとってこの本は読むに値しないものだった——球団経営者たちは、読んでいないことを繰り返し自慢した。