可以说我有
a = "FIFA 13"
然后我写
"bla" and "13" in a
结果是真的……为什么?bla不在a中
您的布尔表达式被评估为("bla") and ("13" in a)
,非空字符串评估为 true,因此如果"13" in a
为 true,则整个表达式将评估为 true。
相反,使用all()
:
all(x in a for x in ("bla", "13"))
或者只是分别检查:
"bla" in a and "13" in a
你应该使用
In [1]: a = "FIFA 13"
In [2]: "bla" in a and "13" in a
Out[2]: False
"bla"
是真的
"13" in a
是真的
因此,"bla" and "13" in a
是真的
你想写的可能是:("bla" in a) and ("13" in a)
您的代码不会像读取的那样被解释:
("bla") and ("13" in a)
"bla"
是真实的,所以它自动评估为True
。"13" in a
可能是True
。False and True
计算结果为True
,因此"bla"
并未真正考虑在内。
你必须更明确一点:
'bla' in a and '13' in a
或者您可以使用不可读的单行:
all(map(a.__contains__, ('bla', '13')))
对于短路的单线,我认为您必须使用itertools.imap
而不是map
..