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.
有什么建议?
一旦你得到那个字符串0b111,就可以直接拆分你感兴趣的数字.对于0b字符串后面的所有字符,将它转换为整数.
[int(d) for d in str(bin(x))[2:]]
Run Code Online (Sandbox Code Playgroud)
就其价值而言,纯粹的算术解决方案似乎要快一些:
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中,第二个版本稍快一些。
首先将数字转换为二进制,然后转换为字符串:
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)
| 归档时间: |
|
| 查看次数: |
16307 次 |
| 最近记录: |