我有一个整数,我想转换为二进制,并从右边开始将一串位存储在一维数组中。例如,如果输入为6
,则它应返回类似[1,1,0]
的数组。怎么在python中做到?
答案 0 :(得分:6)
可能最简单的方法是不使用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()
更清洁。
答案 1 :(得分:4)
>>> map(int, bin(6)[2:])
[1, 1, 0]
如果你不想要一个整数列表(而是一个字符串),你可以省略map
组件而不是:
>>> list(bin(6)[2:])
['1', '1', '0']
相关文档:
答案 2 :(得分:3)
您可以使用此命令:
map(int, list(bin(YOUR_NUMBER)[2:]))
它的作用是:
bin(YOUR_NUMBER)
将YOUR_NUMBER
转换为二进制表示bin(YOUR_NUMBER)[2:]
获取有效数字,因为字符串以'0b110'
格式返回,因此您必须删除0b
list(...)
将字符串转换为列表map(int, ...)
将字符串列表转换为整数列表答案 3 :(得分:1)
答案 4 :(得分:1)
在现代Python中,你可以(>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:] ]
在2.5中,您将获得NameError: name 'bin' is not defined
。
答案 5 :(得分:1)
其他人回答使用bin()
。它有效,但我发现使用字符串操作来做数学有点......呃......蹩脚:
def tobits(x):
r = []
while x:
r.append(x & 1)
x >>= 1
return r
tobits(0)
将返回一个空列表。这可能是好的与否,取决于你将用它做什么。因此,如果需要,请将其视为一种特殊情况。
答案 6 :(得分:0)
您可以使用 numpy.unpackbits
。
这是带有示例的详细链接:https://numpy.org/doc/stable/reference/generated/numpy.unpackbits.html