分割するより走査
まぁ、そりゃそうだなとかおもったので、zip を使わないのも合わせて、timeit で Benchmarkとか
なるほど、流石。と思ったけど、少しは返したいな、と
def checksum_uplw(s): upper = sum([int(x,16) for x in s[0::2]]) lower = sum([int(x,16) for x in s[1::2]]) return (upper << 4) + lower
とか無駄なあがきしてみたけど、たいして速くならなかった。さらにこざかしいdict化した方が(当たり前ながら)よほど速かった。。。
trans = dict((("0"+hex(x)[2:])[-2:].upper(), x) for x in xrange(0,256)) def checksum_dicts(s): return hex(sum(trans[s[i:i+2]] for i in xrange(0, len(s), 2)))
re 2.01483201981 zip 2.75713682175 izip 2.6164419651 slice 1.86801886559 uplw 2.61173987389 dicts 1.30415701866
当たり前すぎて情報量が限りなく0 .... orz しいません、も、これくらいにしときます
しかしやはりlisp脳な分割->リスト処理組み合わせ、よりも C脳な走査->ポインタ処理組み合わせ、の方が速い。計算機側の概念(都合)に近ければ近いほど高効率なのはあたりまえか。