繁体   English   中英

Python If语句中的运算符

[英]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

orand运算符不会像您认为的那样链接。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM