算在Python If语句

问题描述:

这是一个简单的代码片段,我有:算在Python If语句

>>> test = ['asas', 'asa12', 'sdsdsd12', 'vccvcvcv', 'rertrtt11'] 
>>> for i in test: 
...  if '11' in i: 
...   print i 
... 
rertrtt11 

作品作为expected.Now赶上含有11或12的元件,我这样做:

>>> test = ['asas', 'asa12', 'sdsdsd12', 'vccvcvcv', 'rertrtt11'] 
>>> for i in test: 
...  if '11' or '12' in i: 
...   print i 
... 
asas 
asa12 
sdsdsd12 
vccvcvcv 
rertrtt11 

这是意想不到的。我希望只捕捉11或12个元素,但输出包含所有元素。

虽然试图解决问题,我尝试过的运营商试图了解行为:

>>> test = ['asas', 'asa12', 'sdsdsd12', 'vccvcvcv', 'rertrtt11'] 
>>> for i in test: 
...  if '11' and '12' in i: 
...   print i 
... 
asa12 
sdsdsd12 

现在我彻底的困惑,我在等一个空集,因为有与两个11没有元素和12在他们的。是我的理解python中的操作符功能完全错误?

'11' or '12' in i评估这样

('11') or ('12' in i) 

所以,第一个部分是永远truthy。这就是为什么所有这些都被打印。在第二种情况下,

('11') and ('12' in i) 

这里,第一部分是始终Truthy,所以只会打印包含12的项目。您可能希望做

if '11' in i and '12' in i: 

if all(item in i for item in ('11', '12')): 

具有或条件,可以使用any功能,这样

if any(item in i for item in ('11', '12')): 

为了给你一个小而简单的解决方法,你应该请尝试:

if (('11' in i) or ('12' in i)): 
    #do something 

if (('11' in i) and ('12' in i)): 
    #do another thing 

这不是一个意外错误,请参阅文档

orand运营商并不链你认为他们做的方式。

if '11' and '12' in i: #this problem is the same for or 

首先蟒将执行'12' in i作为in具有比and一个更高的优先级。然后andin测试返回'12',这可以隐式转换为True

要得到你真正想要的效果,你需要做的:

if '11' in i and '12' in i: # same for or 

这会正确地检查是否'11'i,那么如果'12'i,然后and/or结果这两个测试一起。