2012-12-01 39 views

回答

3

如果你已經得到了有效的一個比特串,那麼你可以做:

>>> a 
[0, 1, 0, 1] 
>>> int(''.join(str(i) for i in a), 2) 
5 
>>> 
3

想不出一個單一功能的,但下面是非常簡單的:

In [60]: val = 0 

In [61]: for digit in [0,1,0,1]: 
    ....:  val = val * 2 + digit 
    ....:  

In [62]: val 
Out[62]: 5 

編輯:下面的一行代碼做相同的工作,如果慢一點:

In [66]: reduce(lambda x,y: 2*x+y, [0,1,0,1,1]) 
Out[66]: 11 
+0

我喜歡'reduce' +1 –

1

這應該做你想要什麼:

a_list = [0,1,0,1] 
int(''.join(map(str,a_list)), base=2) 
+0

'lambda x:str(x)'? – NPE

+0

@NPE'join'在序列項不是字符串的情況下產生'TypeError'。你的'減少'雖然更好。 – jojo

+0

@dedoco:所以如果你用一個參數調用這個lambda函數,結果是什麼?有一個更簡單的方法來寫這個。 ;-) –

2
sum(j<<i for i, j in enumerate(reversed([0, 1, 0, 1]))) 
0

如果您需要做的位操作在Python中,一定要看看這個wiki頁面:

http://wiki.python.org/moin/BitManipulation

而且雖然沒有內置的功能,但那裏提到的庫(特別是python-bitstring)應該可以幫到你。