在 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**n2**(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