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

时间:2013-10-14 08:02:28

标签: python list

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

>>> test = ['aaa','bbb','ccc']
>>> if 'ddd' or 'eee' in test:
...     print True
... 
True
>>> 

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

我错过了什么吗?

4 个答案:

答案 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

以获得您想要的结果。