这可能是一个愚蠢的问题,但为什么这段代码表现得像这样呢?
>>> test = ['aaa','bbb','ccc']
>>> if 'ddd' or 'eee' in test:
... print True
...
True
>>>
Run Code Online (Sandbox Code Playgroud)
我期待stdio上没有打印任何内容,因为IF语句中的所有字符串都不在列表中.
我错过了什么吗?
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')):