让我说我有
a = "FIFA 13"
然后我写了
"bla" and "13" in a
结果是真的......为什么? bla 不在
中答案 0 :(得分:8)
您的布尔表达式被评估为("bla") and ("13" in a)
,非空字符串计算为true,因此如果"13" in a
为真,则整个表达式将评估为true。
相反,请使用all()
:
all(x in a for x in ("bla", "13"))
或者只是单独检查:
"bla" in a and "13" in a
答案 1 :(得分:3)
你应该使用
In [1]: a = "FIFA 13"
In [2]: "bla" in a and "13" in a
Out[2]: False
答案 2 :(得分:2)
"bla"
true
"13" in a
true
因此,"bla" and "13" in a
true
您想写的内容可能是:("bla" in a) and ("13" in a)
答案 3 :(得分:2)
您的代码不会被解读为:
("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
..