2012-12-01 40 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)应该可以帮到你。