首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中位列表转换为整数

Python中位列表转换为整数
EN

Stack Overflow用户
提问于 2012-09-17 22:23:44
回答 6查看 28K关注 0票数 27

我在Python语言中有这样一个列表:[1,0,0,0,0,0,0,0]。我是否可以像我输入0b10000000那样将其转换为整数(即转换为128)?我还需要将像[1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0]这样的序列转换为整数(这里它将返回0b1100000010000000,即259)。如果需要,list的长度始终是8的倍数。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-09-17 22:25:17

您可以使用位移位:

代码语言:javascript
复制
out = 0
for bit in bitlist:
    out = (out << 1) | bit

这很容易击败A.R.S.提出的"int cast“方法,或者Steven Rumbalski提出的带有查找的修改后的cast方法:

代码语言:javascript
复制
>>> def intcaststr(bitlist):
...     return int("".join(str(i) for i in bitlist), 2)
... 
>>> def intcastlookup(bitlist):
...     return int(''.join('01'[i] for i in bitlist), 2)
... 
>>> def shifting(bitlist):
...     out = 0
...     for bit in bitlist:
...         out = (out << 1) | bit
...     return out
... 
>>> timeit.timeit('convert([1,0,0,0,0,0,0,0])', 'from __main__ import intcaststr as convert', number=100000)
0.5659139156341553
>>> timeit.timeit('convert([1,0,0,0,0,0,0,0])', 'from __main__ import intcastlookup as convert', number=100000)
0.4642159938812256
>>> timeit.timeit('convert([1,0,0,0,0,0,0,0])', 'from __main__ import shifting as convert', number=100000)
0.1406559944152832
票数 56
EN

Stack Overflow用户

发布于 2012-09-17 22:33:45

使用bitstring模块的...or

代码语言:javascript
复制
>>> from bitstring import BitArray
>>> bitlist=[1,0,0,0,0,0,0,0]
>>> b = BitArray(bitlist)
>>> b.uint
128
票数 15
EN

Stack Overflow用户

发布于 2012-09-18 05:18:25

我发现了一种方法,虽然他的解决方案当然更漂亮,但它的性能略高于马提金·皮特斯的解决方案。实际上,我对结果有点惊讶,但不管怎样...

代码语言:javascript
复制
import timeit

bit_list = [1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0]

def mult_and_add(bit_list):
    output = 0
    for bit in bit_list:
        output = output * 2 + bit
    return output

def shifting(bitlist):
     out = 0
     for bit in bitlist:
         out = (out << 1) | bit
     return out

n = 1000000

t1 = timeit.timeit('convert(bit_list)', 'from __main__ import mult_and_add as convert, bit_list', number=n)
print "mult and add method time is : {} ".format(t1)
t2 = timeit.timeit('convert(bit_list)', 'from __main__ import shifting as convert, bit_list', number=n)
print "shifting method time is : {} ".format(t2)

结果:

代码语言:javascript
复制
mult and add method time is : 1.69138722958 
shifting method time is : 1.94066818592 
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12461361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档