N位二进制数

2024-03-29 07:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

用于生成n数字中的二进制数
我这样做是为了得到16个二进制数。

n = 6                       # for 6 digits
for i in xrange(16):
    b = bin(i)[2:]
    l = len(b)
    b = str(0) * (n - l) + b
    print b

结果是这样的

000000
000001
000010
000011
000100
000101
000110
000111
001000
001001
001010
001011
001100
001101
001110
001111

但我想要的是不在前缀中添加一系列0s就得到这些值 有人能帮我吗。
谢谢


Tags: inforlenbin二进制数字printdigits
3条回答

删除pad0s的行

n = 6
for i in xrange(16):
    b = bin(i)[2:]
    l = len(b)
    #b = str(0) * (n - l) + b  # <--------
    print b

如果您指的是不带字符串oeprator的填充数,请将^{}^{} type format一起使用:

n = 6
for i in xrange(16):
    print '{:0{}b}'.format(i, n)
    # OR  print '{:06b}'.format(i)

    # OR  print '{:b}'.format(i)  if you want no leading 0s.

如果你要求不同的方法:

n = 6
for i in xrange(16):
    b = bin(i)[2:].zfill(n)
    print b

str.zfill(n)将字符串的左边用零填充,使其至少具有长度n


如果不需要前导零:

for i in xrange(16):
    b = bin(i)[2:]
    print b

通过这段代码,您可以生成时间复杂度高达n/O(2^int(log(n))的二进制数列表。


import math

num=25

n=int(math.log(num,2))

x=['0','1']

for i in range(1,int(n)+1):

        for j in range(0,2**i):  

        x.append('1'+x[j])

        x[j]='0'+x[j]



print(x[0:num])

输出:

['00000', '00001', '00010', '00011', '00100', '00101', '00110', '00111', '01000', '01001', '01010', '01011', '01100', '01101', '01110', '01111', '10000', '10001', '10010', '10011', '10100', '10101', '10110', '10111', '11000']

希望这有帮助

相关问题 更多 >