递增存储为布尔值列表的数字

时间:2018-08-30 16:32:22

标签: python

在此示例中,我遍历了掩码的所有可能变体,并将其存储为布尔值列表

Nmax = 32
for num in range (2**Nmax):
    bool_list = [bool(num & (1<<n)) for n in range(Nmax)]
    # other stuff

但是,生成bool_list的操作在代码中有点瓶颈-其余的是相当快的矩阵乘法。是否有比我正在做的增加存储在bool_list中的数字更快的方法?

2 个答案:

答案 0 :(得分:1)

您只是将{False,True)Nmax次的所有组合。因此,

from itertools
print(list(itertools.product(*[(False, True)]*Nmax)))

将显示所有遮罩。

如果要在迭代时使用它,

Nmax = 32
masks = itertools.product(*[(False, True)]*Nmax)
for mask in masks:
    # Do stuff

请注意,mask将是一个元组而不是一个列表。

答案 1 :(得分:0)

对于一个,我认为您可以预先计算这些变化:

Nmax = 32
shifts = [(1 << n) for n in range(Nmax)]
for num in range(2**Nmax):
    bool_list = [bool(num & shift) for shift in shifts]