我有一个包含布尔值的列表列表。如何输入一个布尔函数并在列表的每个子列表中检查它?
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
这就是我想要做的。对于两个布尔公式,我基本上有一个 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