Python打印000-111之间的所有二进制数

Python打印000-111之间的所有二进制数,python,performance,binary,Python,Performance,Binary,我需要以字符串形式生成000-111中的所有二进制数,我的第一种方法如下所示。然而,让我吃惊的是,这肯定是一种非常低效的方法。请问有更好的方法吗?它们如何更有效 # print all binary numbers from 000 - 111 for i in range(2): for j in range(2): for k in range(2): value = f'{i}{j}{k}'

我需要以字符串形式生成000-111中的所有二进制数,我的第一种方法如下所示。然而,让我吃惊的是,这肯定是一种非常低效的方法。请问有更好的方法吗?它们如何更有效

 # print all binary numbers from 000 - 111
    for i in range(2):
        for j in range(2):
            for k in range(2):
                value = f'{i}{j}{k}'
                print(value)
你可以做:

for i in range(8):
    s = bin(i)[2:]
    print(s.zfill(3))
输出

000
001
010
011
100
101
110
111
你可以做:

for i in range(8):
    s = bin(i)[2:]
    print(s.zfill(3))
输出

000
001
010
011
100
101
110
111
你可以用这个

>>> ['{:03b}'.format(i) for i in range(8)]
['000', '001', '010', '011', '100', '101', '110', '111']

>>> ['{:03b}'.format(i) for i in range(2,8)]
['010', '011', '100', '101', '110', '111']
只需将范围转换为十进制即可。

您可以使用此选项

>>> ['{:03b}'.format(i) for i in range(8)]
['000', '001', '010', '011', '100', '101', '110', '111']

>>> ['{:03b}'.format(i) for i in range(2,8)]
['010', '011', '100', '101', '110', '111']

只需将范围转换为十进制。

以下是几种不同的方法,以及它们的结果。性能差异在总体方案中是很小的,所以你不应该太担心

%%timeit
for i in range(2):
    for j in range(2):
        for k in range(2):
            value = f'{i}{j}{k}'
            print(value)
原始结果:
823µs±49.2µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

结果:
784µs±35.6µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

结果:
807µs±36.7µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

结果:
773µs±43.6µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

如果您不想使用二进制表示,那么只需要一个itertools版本。请注意,为了比较,我排除了库导入

from itertools import product
bits = ['0', '1']
%%timeit
for i in product(bits, repeat = 3):
    print(''.join(i))

结果:
801µs±65.5µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

以下是几种不同的方法及其结果。性能差异在总体方案中是很小的,所以你不应该太担心

%%timeit
for i in range(2):
    for j in range(2):
        for k in range(2):
            value = f'{i}{j}{k}'
            print(value)
原始结果:
823µs±49.2µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

结果:
784µs±35.6µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

结果:
807µs±36.7µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

结果:
773µs±43.6µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

如果您不想使用二进制表示,那么只需要一个itertools版本。请注意,为了比较,我排除了库导入

from itertools import product
bits = ['0', '1']
%%timeit
for i in product(bits, repeat = 3):
    print(''.join(i))

结果:
801µs±65.5µs/循环(7次运行的平均值±标准偏差,每个循环1000次)

可以,但是“引擎盖下”是否更有效?如果是,为什么请?好的,但是“引擎盖下”是否更有效?如果是,为什么请?您可以将格式说明符更改为
'{:03b}'
,以精确匹配op的输出。谢谢。我正在寻找。您可以将格式说明符更改为
'{:03b}'
,以完全匹配op的输出。谢谢。我一直在寻找这个问题。我不明白这怎么会是一个重复的链接问题。我在寻求一种高效地生成多个二进制值的方法,而另一个问题只涉及一个转换。我不认为这是链接问题的重复。我在寻求一种高效地生成多个二进制值的方法,而另一个问题只涉及一个转换。