我正在寻找一种更简洁的方式在Python中编写以下内容。
给定输入,检查输入中是否有两个变量:
if (input is not None and (
(var_a == '' or (var_a != '' and var_a not in input))
or (var_b == '' or (var_b != '' and var_b not in input))
)):
# Do something...
pass
因为'' in 'any string'
评估为True
,所以我不能简单地测试var_a not in input
,因此增加的复杂性也会检查变量是否为空字符串。
希望我只是忽略了一种更简单的表达方式。
感谢。
P.S。我的变量实际上没有命名为input
,var_a
和var_b
,请不要担心。
答案 0 :(得分:2)
if input is not None and (
not var_a or var_a not in input or # Should this be 'or' or 'and'? 'or' looks unusual here
not var_b or var_b not in input):
pass
您可以跳过var_a != ''
的检查,因为var_a == '' or
之后它们将始终为True
。如果var_a == ''
不能not var_a
,则var_a
等同于None
(我猜它不可能,因为你不会检查一下)
修改强>:
现在我想到了你,你也可以将not
从第二个分支中分解出来:
if input is not None and not(
var_a and var_a in input and
var_b and var_b in input):
pass
......或者整个表达方式:
if not (input is None or
var_a and var_a in input and
var_b and var_b in input):
pass
答案 1 :(得分:0)
根据定义,如果var_a或var_b不是假的,即为空,则它们必须为True,因此您只需要一次检查,而不是检查两种情况:
我会在if inp is not None
内嵌入任何内容:
if inp is not None:
if any((not var_a, var_a not in inp, not var_b, var_b not in inp)):
# do whatever
In [26]: var_a = ""
In [27]: var_b = ""
In [28]: inp = "foo"
In [29]: (not var_a, var_a not in inp, not var_a, var_a not in inp)
Out[29]: (True, False, True, False)
答案 2 :(得分:-1)
list = [var_a, var_b, input]
if '' in list == FALSE:
if var_a is in input or var_b is in input:
# do something
else:
#do something