如何在Python中将十进制转换为二进制列表

28

1
我尝试了这个:binary = 0while num != 0: bit = num % 2 binary = bit +(10* binary) num = num / 2 binary=[binary] return binary但它没有在数字之间给我逗号,并且它并不总是添加零。 - booboboobobob
3
这个问题已经被问过了。 - John
@booboboobobob 你应该在你的问题中加入这样的限制条件。 - Yuushi
@johnthexiii -- 你说得对。为什么不投票关闭呢? - mgilson
1
@johnthexiii -- 请查看此篇关于元数据的帖子 - mgilson
显示剩余6条评论
3个回答

31

你可以使用内置的bin函数:

bin(8) #'0b1000'

获取列表:

[int(x) for x in bin(8)[2:]]

虽然似乎可能有更好的方法......


4
依靠字符串表现细节,从整数转换为字符串再转换为列表似乎不是最优选择。 - slacy

22

试一试:

>>> list('{0:0b}'.format(8))
['1', '0', '0', '0']

编辑 -- 哎呀,你想要整数:

>>> [int(x) for x in list('{0:0b}'.format(8))]
[1, 0, 0, 0]

又一次编辑 -

mgilson的版本稍微快一些:

$ python -m timeit "[int(x) for x in list('{0:0b}'.format(8))]"
100000 loops, best of 3: 5.37 usec per loop
$ python -m timeit "[int(x) for x in bin(8)[2:]]"
100000 loops, best of 3: 4.26 usec per loop

7

为了保持你最初的尝试精神:

binary = []
while num != 0:
    bit = num % 2
    binary.insert(0, bit)
    num = num / 2

4
最好是在最后使用.reverse()翻转列表前,先使用.append()添加位而非在列表开头使用insert - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接