1

可以说我有

a = "FIFA 13"

然后我写

"bla" and "13" in a

结果是真的……为什么?bla不在a中

4

4 回答 4

8

您的布尔表达式被评估为("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
于 2012-10-31T21:54:53.700 回答
3

你应该使用

In [1]: a = "FIFA 13"

In [2]: "bla" in a and "13" in a
Out[2]: False
于 2012-10-31T21:55:42.793 回答
2

"bla"真的

"13" in a真的

因此,"bla" and "13" in a真的

你想写的可能是:("bla" in a) and ("13" in a)

于 2012-10-31T21:56:44.690 回答
2

您的代码不会像读取的那样被解释:

("bla") and ("13" in a)

"bla"是真实的,所以它自动评估为True"13" in a可能是TrueFalse and True计算结果为True,因此"bla"并未真正考虑在内。

你必须更明确一点:

'bla' in a and '13' in a

或者您可以使用不可读的单行:

all(map(a.__contains__, ('bla', '13')))

对于短路的单线,我认为您必须使用itertools.imap而不是map..

于 2012-10-31T21:57:22.240 回答