我想生成给定长度的所有二进制掩码,即对于n = 3,我想生成000,001,010,011,100,101,110,111。
我当前的代码看起来像这样,很老的样式,无法弄清楚如何使用f字符串或其他很酷的方法来代替zfill。
for i in range(2**n):
print(bin(i)[2:].zfill(n))
有什么想法吗?谢谢!
您可以使用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
您可以使用itertools。
from itertools import product
for t in product(('0', '1',), repeat=3):
print(''.join(t))
product()
的调用复杂度为O(1)
,因为它是生成器,所以直到您进行迭代之前都不会发生任何事情。
此处讨论了实际product()
函数的复杂度:efficiency of Python's itertools.product()