[英]Operators in Python If statement
这是我的一个简单代码段:
>>> test = ['asas', 'asa12', 'sdsdsd12', 'vccvcvcv', 'rertrtt11']
>>> for i in test:
... if '11' in i:
... print i
...
rertrtt11
现在可以正常工作了,现在捕获包含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的元素,但是输出包含所有元素。
在尝试进行故障排除时,我尝试通过and运算符来尝试了解行为:
>>> 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)
因此,第一部分始终是真实的。 这就是为什么将它们全部打印出来的原因。 在第二种情况下
('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
这不是意外错误,请参考docs
or
和and
运算符不会像您认为的那样链接。
if '11' and '12' in i: #this problem is the same for or
第一个python将'12' in i
执行'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
这两个测试的结果一起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.