在 Python3 中生成给定长度的所有二进制掩码的最佳方法 [最佳时间复杂度] 是什么?
What is the best way [best time complexity] to generate all binary masks of given length in Python3?
我想生成给定长度的所有二进制掩码,即对于 n = 3 我想生成
000、001、010、011、100、101、110、111。
我当前的代码看起来像这样,很老的风格,不知道如何用 f-strings 或其他很酷的东西而不是 zfill 来做同样的事情。
for i in range(2**n):
print(bin(i)[2:].zfill(n))
有什么想法吗?谢谢!
您可以使用 itertools 来完成。
from itertools import product
for t in product(('0', '1',), repeat=3):
print(''.join(t))
调用 product()
的复杂度是 O(1)
,因为它是一个生成器,所以在你迭代之前什么都不会发生。
此处讨论了实际 product()
函数的复杂性:
您可以通过使用从 2**n
到 2**(n+1)
的范围并从另一个字符中提取子字符串来提高现有代码的效率。这消除了零填充的需要:
n = 3
for i in range(2**n, 2**(n+1)):
print(bin(i)[3:])
输出
000
001
010
011
100
101
110
111
我想生成给定长度的所有二进制掩码,即对于 n = 3 我想生成 000、001、010、011、100、101、110、111。
我当前的代码看起来像这样,很老的风格,不知道如何用 f-strings 或其他很酷的东西而不是 zfill 来做同样的事情。
for i in range(2**n):
print(bin(i)[2:].zfill(n))
有什么想法吗?谢谢!
您可以使用 itertools 来完成。
from itertools import product
for t in product(('0', '1',), repeat=3):
print(''.join(t))
调用 product()
的复杂度是 O(1)
,因为它是一个生成器,所以在你迭代之前什么都不会发生。
此处讨论了实际 product()
函数的复杂性:
您可以通过使用从 2**n
到 2**(n+1)
的范围并从另一个字符中提取子字符串来提高现有代码的效率。这消除了零填充的需要:
n = 3
for i in range(2**n, 2**(n+1)):
print(bin(i)[3:])
输出
000
001
010
011
100
101
110
111