読者です 読者をやめる 読者になる 読者になる

牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

2進数の数値を10進数にするスクリプトをまたPythonでやってみた

Python

以前のエントリ『http://d.hatena.ne.jp/CortYuming/20080603/p1』をやり直してみた

befor

前回のコードの引数を文字列から数値に変更。なぜ引数を文字列にしたのだろ?

def bintodecnum(n, num = 2):
   s = str(n)
   slen = len(s) - 1
   result = 0
   for i in s:
      result += int(i) * (num ** slen)
      slen -= 1
   return result
bintodecnum(1100)
after

今回、やり直したコード

def bin_to_decnum(num,  b = 2):
    return sum([int(n) * (b ** i) for i, n in enumerate(reversed(str(num)))])
print bin_to_decnum(1100)    #12

行数が減りスマートになった?

最近恒例の速度テスト
import timeit
t= timeit.Timer(stmt="""
def bintodecnum(n, num = 2):
   s = str(n)
   slen = len(s) - 1
   result = 0
   for i in s:
      result += int(i) * (num ** slen)
      slen -= 1
   return result
bintodecnum(1100)
""")
print "before:", t.timeit(number = 100000)
t= timeit.Timer(stmt="""
def bin_to_decnum(num,  b = 2):
    return sum([int(n) * (b ** i) for i, n in enumerate(reversed(str(num)))])
bin_to_decnum(1100)    #12
""")
print "after: ", t.timeit(number = 100000)

結果

before: 1.21758294106
after:  1.53807091713

速くなった(・∀・)b
少し進歩した?

あれ?遅くなってる!だめじゃん(||゚Д゚)