【问题标题】:Binary numbers of N digitsN位二进制数
【发布时间】:2014-10-24 17:33:46
【问题描述】:

用于在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 前缀的情况下获取这些值。
谁能帮我解决这个问题。
谢谢

【问题讨论】:

  • 请注意,函数 xrange() 是特定于 Python 2.x 的;相反,对 Python 3.x 使用 range()

标签: python string python-2.7 binary


【解决方案1】:

删除填充0s 的行。

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

如果您的意思是没有字符串操作符的填充数字,请使用 str.formatb 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.

【讨论】:

  • 我认为用户的意思是用前导零格式化字符串而不连接字符串
  • @kroolik,感谢您指出这一点。我相应地更新了答案。
【解决方案2】:

如果您要求不同的方法:

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

【讨论】:

  • 感谢分享这个
【解决方案3】:

您可以像这样一起使用列表推导和位转换: n = 范围

def binary_list(n):
    return ['{:0{}b}'.format(i, n) for i in range(n*n-1)]

print(binary_list(3)) -->
['000', '001', '010', '011', '100', '101', '110', '111']

或者,如果您想将每个数字存储在其自己的索引中,请执行以下操作:

def binary_list(n):
    return [[int(j) for j in '{:0{}b}'.format(i, n)] for i in range(n*n-1)]

print(binary_list(3))--->
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]

【讨论】:

  • 范围必须是 2**n 而不是 n*n-1
【解决方案4】:
n = 4 
for i in range(0, 2**n):
    b = bin(i)[2:]
    print(str(b).zfill(n))

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

n = 6

000000 000001 000010 000011 .... 111101 111110 111111

【讨论】:

    【解决方案5】:

    通过此代码,您可以在 O(2^int(log(n))) 时间复杂度中生成最多为 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']
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 2018-09-15
      • 2015-01-16
      相关资源
      最近更新 更多