通过二进制组合迭代变量

Chr*_*ley 4 python loops boolean python-3.x

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

def f(a, b, c):
  return not (a and (b or c))
Run Code Online (Sandbox Code Playgroud)

有没有办法循环a,b,c, 000, 001, 010,011100

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

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

它似乎可以工作,但是ab、 和c打印出来时都是整数,并且整数与逻辑运算符的交互方式与布尔值不同。例如,4 and 2等于29 or 3等于9。我不太介意,只是花了一些时间来说服自己这并不重要。

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

che*_*ner 5

使用itertools.product

from itertools import product


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

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