在Python3中生成给定长度的所有二进制掩码的最佳方法[最佳时间复杂度是什么?

问题描述 投票:0回答:2

我想生成给定长度的所有二进制掩码,即对于n = 3,我想生成000,001,010,011,100,101,110,111。

我当前的代码看起来像这样,很老的样式,无法弄清楚如何使用f字符串或其他很酷的方法来代替zfill。

for i in range(2**n):
    print(bin(i)[2:].zfill(n))

有什么想法吗?谢谢!

python-3.x bit-manipulation bitmask
2个回答
2
投票

您可以使用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

-1
投票

您可以使用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()

© www.soinside.com 2019 - 2024. All rights reserved.