将二进制转换为数字列表Python

use*_*238 8 python binary list

我有以下场景:

x = 0b0111
Run Code Online (Sandbox Code Playgroud)

我想将此值转换为:

y = [0, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

当我转换时x = 0b1001,我可以得到y = [1, 0, 0, 1],但当我尝试做同样的事情x = 0b0111,然后转换回来str(bin(y))- 我似乎失去了领先0,并获得0b111.

有什么建议?

Jor*_*wis 8

一旦你得到那个字符串0b111,就可以直接拆分你感兴趣的数字.对于0b字符串后面的所有字符,将它转换为整数.

[int(d) for d in str(bin(x))[2:]]
Run Code Online (Sandbox Code Playgroud)


geo*_*org 5

就其价值而言,纯粹的算术解决方案似乎要快一些:

import timeit

def bits1(n):
    b = []
    while n:
        b = [n & 1] + b
        n >>= 1
    return b or [0]

timeit.timeit(lambda: bits1(12345678))
[out] 7.717339038848877

def bits2(n):
    return [int(x) for x in bin(n)[2:]]


timeit.timeit(lambda: bits2(12345678))
[out] 10.297518014907837
Run Code Online (Sandbox Code Playgroud)

2019更新:在python 3.7.3中,第二个版本稍快一些。


iab*_*der 3

首先将数字转换为二进制,然后转换为字符串:

str(bin(7))
'0b111' #note the 0b in front of the binary number
Run Code Online (Sandbox Code Playgroud)

0b接下来,从字符串中删除

str(bin(7))[2:]
'111'
Run Code Online (Sandbox Code Playgroud)

最后,我们使用列表理解从字符串创建一个整数列表,其大致形式如下:

[expr for i in iterable]
[int(i) for i in str(bin(x))[2:]]
Run Code Online (Sandbox Code Playgroud)