pythonで01の文字列を10進数に変換するには
int('101',2) # 5
とできるので、あとは、C=(A&B)としてC/(A+B-C)という式で1のビットを数えあげればタニモト係数は求まる。
ビットの数え上げはシフト演算子を使ってやればよさげ。
>>> def cb(x):
... count = 0
... while(x!=0):
... count += x & 1
... x >>= 1
... return count
こんな感じでOKと思うんだけど大きい数字を与えた場合に11LとかLがついてくるのが気持ち悪い。
タニモト係数はさっきの関数を利用して
>>> a = int('10111',2)
>>> b = int('11010',2)
>>> float(cb(a&b))/(cb(a)+cb(b)-cb(a&b))
0.40000000000000002
さくっと求まりそうだ。