Python打印000-111之间的所有二进制数
我需要以字符串形式生成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}'
# 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的输出。谢谢。我一直在寻找这个问题。我不明白这怎么会是一个重复的链接问题。我在寻求一种高效地生成多个二进制值的方法,而另一个问题只涉及一个转换。我不认为这是链接问题的重复。我在寻求一种高效地生成多个二进制值的方法,而另一个问题只涉及一个转换。