这可能是一个愚蠢的问题,但为什么这段代码表现得像这样呢?
>>> test = ['aaa','bbb','ccc']
>>> if 'ddd' or 'eee' in test:
... print True
...
True
>>>
我期待stdio上没有打印任何内容,因为IF语句中的所有字符串都不在列表中。
我错过了什么吗?
答案 0 :(得分:7)
if 'ddd' or 'eee' in test
评估为:
if ('ddd') or ('eee' in test)
:
作为非空字符串始终为True
,因此or
操作会短路并返回True
。
>>> bool('ddd')
True
要解决此问题,您可以使用:
if 'ddd' in test or 'eee' in test:
或any
:
if any(x in test for x in ('ddd', 'eee'))
:
答案 1 :(得分:4)
您的测试应该是
if 'ddd' in test or 'eee' in test:
在代码中你当前有'ddd'字符串被评估为boolean,因为它不是空的,它的bool值是True
答案 2 :(得分:0)
你在这里遗漏了一些东西:
if 'ddd' or 'eee' in test:
相当于:
if ('ddd') or ('eee' in test):
因此,这将始终为True,因为'ddd'
被视为True。
你想:
if any(i in test for i in ('ddd', 'eee')):
答案 3 :(得分:0)
>>> if 'ddd'
... print True
将打印
True
所以你应该写:
>>> if 'ddd' in test or 'eee' in test:
... print True
以获得您想要的结果。