算在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
这不是一个意外错误,请参阅文档
答
的or
和and
运营商并不链你认为他们做的方式。
if '11' and '12' in i: #this problem is the same for or
首先蟒将执行'12' in i
作为in
具有比and
一个更高的优先级。然后and
从in
测试返回'12'
,这可以隐式转换为True
。
要得到你真正想要的效果,你需要做的:
if '11' in i and '12' in i: # same for or
这会正确地检查是否'11'
是i
,那么如果'12'
是i
,然后and
/or
结果这两个测试一起。