自然二进制代码 - 找到前n个数字

时间:2011-02-08 18:10:06

标签: python binary

输出/找到前n个天然二进制代码:

import math  
def binary_print(n):
    m = int(math.ceil(math.log(n, 2)))
    for i in range(n):
        b = str(bin(i)[2:])
        print((m - len(b)) * '0' + b)

我的问题是:

你知道在Python中用其他任何方法吗?也许更快?或更短(更少的代码)?

2 个答案:

答案 0 :(得分:5)

这个更短,不确定更快:

def binary_print(n):
    print '\n'.join('{:0{}b}'.format(x, (n-1).bit_length()) for x in range(n))

使用示例:

>>> binary_print(6)
000
001
010
011
100
101

答案 1 :(得分:4)

def binary_values(n):
    fmt = "{0:0"+str((n-1).bit_length())+"b}"
    for i in range(n):
        print fmt.format(i)

注意:(n-1).bit_length()修复了fencepost错误(否则,如果n是2的幂,则会打印1个过多的前导零)。

也可以通过展开查找来加快速度,

def binary_values(n):
    fmt = ("{0:0"+str((n-1).bit_length())+"b}").format
    for i in range(n):
        print fmt(i)