分割するより走査

まぁ、そりゃそうだなとかおもったので、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脳な走査->ポインタ処理組み合わせ、の方が速い。計算機側の概念(都合)に近ければ近いほど高効率なのはあたりまえか。