我有一个包含布尔值的列表列表。如何输入一个布尔函数并在列表的每个子列表中检查它?

I have a list of lists containing boolean values. How can I input a boolean function and check it in every sublist of my list?

这就是我想要做的。对于两个布尔公式,我基本上有一个 truth-table:

x=[True, False]
y=[True, False]
a=[]
for i in x:
    for z in y:
        a.append([i, z])

现在我想输入一些布尔表达式并在我的真值的每一“行”中检查它-table。我试过这个:

p=None
q=None
result=[]
exp=input("Type your boolean expression using p and q as variables: ")
for i in a:
    p, q = i[0], i[1]
    result.append(exp)
    print(result)

但是当我尝试键入一些布尔表达式作为输入时,例如:

 (not p) or q

它将at用作字符串。但是如果我这样做:

exp=bool(input("Type your boolean expression using p and q as variables: "))

那么每个非空字符串都会被视为bool中的True。我该如何解决?

根据您所说的,我了解到您想将手写表达式应用于列表的所有元素。

如果您的 table 总是 2 元素宽,您可以使用 :

table = [[True, True], [False, True], [True, False]]  
expression  = 'p and q'  
[eval(expression) for p, q in table]  
# Output
[True, False, False]

但是您的表达式需要遵守 Python 语法。更重要的是 eval 很慢。所以这个答案可能会得到加强。

这里有更多关于 eval 的信息:Documentation