IF语句(检查列表中的字符串)表现得很奇怪

le_*_*ine -5 python list

这可能是一个愚蠢的问题,但为什么这段代码表现得像这样呢?

>>> test = ['aaa','bbb','ccc']
>>> if 'ddd' or 'eee' in test:
...     print True
... 
True
>>> 
Run Code Online (Sandbox Code Playgroud)

我期待stdio上没有打印任何内容,因为IF语句中的所有字符串都不在列表中.

我错过了什么吗?

Ash*_*ary 7

if 'ddd' or 'eee' in test

被评估为:

if ('ddd') or ('eee' in test):

因为非空字符串总是True如此,所以or操作会短路并返回True.

>>> bool('ddd')
True
Run Code Online (Sandbox Code Playgroud)

要解决此问题,您可以使用:

if 'ddd' in test or 'eee' in test:

或者any:

if any(x in test for x in ('ddd', 'eee')):