在二进制组合上迭代变量

Iterate variables over binary combinations

是否有一种简单的方法可以通过 true/false 的所有可能组合来循环变量?例如,假设我们有一个函数:

def f(a, b, c):
  return not (a and (b or c))

有没有办法通过000001010011100等循环a,b,c

我的第一个想法是遍历整数并获取对应于变量位置的位,如下所示:

for i in range (8):
  a = i & 4
  b = i & 2
  c = i & 1
  print(f(a,b,c), " ", a,b,c)

它似乎有效,但 abc 打印出来时都是整数,并且整数与逻辑运算符的交互不同于布尔值。例如,4 and 2 等于 2,而 9 or 3 等于 9。我不太介意,只是想了想才说服自己这无关紧要。

但问题仍然存在,是否有更简单的方法来遍历所有可能的 true/false 或 0/1 值?

使用itertools.product:

from itertools import product


for a, b, c in product([True, False], repeat=3):
  print(f(a,b,c), " ", a,b,c)

如果您真的想要整数 1 和 0,只需将 [True, False] 替换为 [1, 0]。这里没有理由将整数视为位数组。