我有一个整数,我想把它转换成二进制并将比特串存储在从右边开始的一维数组中。例如,如果输入是6,则应返回类似于[1,1,0]的数组。如何在Python中实现?
可能最简单的方法不是使用bin()
和字符串切片,而是使用.format()
的特性:
'{:b}'.format(some_int)
它的行为表现:
>>> print '{:b}'.format(6)
110
>>> print '{:b}'.format(123)
1111011
bin()
函数时,你仅仅只会得到一个带着"0b
"前缀的字符串,因此你需要将其移除。
int
列表编辑:好的,所以你不只是要一个字符串,而是要一个整数列表。你可以这样做:
your_list = map(int, your_string)
整个流程如下:
your_list = map(int, '{:b}'.format(your_int))
bin()
,这种方法更加简洁明了。map(int, list(bin(YOUR_NUMBER)[2:]))
bin(YOUR_NUMBER)
将 YOUR_NUMBER
转换为二进制表示。bin(YOUR_NUMBER)[2:]
获取有效数字,因为该字符串是以 '0b110'
的形式返回的,所以必须删除 0b
。list(...)
将字符串转换为列表。map(int, ...)
将字符串列表转换为整数列表。>python2.5
):>>> bin(23455)
'0b101101110011111'
去掉第一个“0b”:
>>> [ bit for bit in bin(23455)[2:] ]
['1', '0', '1', '1', '0', '1', '1', '1', '0', '0', '1', '1', '1', '1', '1']
所有东西都在一起:
def get_bits(number):
return [ int(bit) for bit in bin(number)[2:] ]
NameError: name 'bin' is not defined
的错误。其他答案使用bin()
来实现。虽然它可以工作,但我认为使用字符串操作来进行数学计算有点... 嗯... 不太好。
def tobits(x):
r = []
while x:
r.append(x & 1)
x >>= 1
return r
tobits(0)
将返回一个空列表。这可能很好,也可能不好,这取决于您对其的处理方式。因此,如果需要,请将其视为特殊情况。
您可以使用numpy.unpackbits
。
这里是详细的链接和示例:https://numpy.org/doc/stable/reference/generated/numpy.unpackbits.html
{:b}
,是时候摆脱对bin(x)[2:]
的滥用了。 - nneonneo