Ami*_*tad 1 python if-statement operators
这是一个简单的代码片段:
>>> test = ['asas', 'asa12', 'sdsdsd12', 'vccvcvcv', 'rertrtt11']
>>> for i in test:
... if '11' in i:
... print i
...
rertrtt11
Run Code Online (Sandbox Code Playgroud)
按预期工作.如果要捕获包含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
Run Code Online (Sandbox Code Playgroud)
这是意料之外的.我希望只捕获11或12中的元素,但输出包含所有元素.
在尝试进行故障排除时,我尝试了一个and运算符来尝试理解行为:
>>> test = ['asas', 'asa12', 'sdsdsd12', 'vccvcvcv', 'rertrtt11']
>>> for i in test:
... if '11' and '12' in i:
... print i
...
asa12
sdsdsd12
Run Code Online (Sandbox Code Playgroud)
现在我很困惑,因为我期待一个空集,因为它们中没有11和12的元素.我对python中运算符功能的理解完全错误?
'11' or '12' in i 是这样评价的
('11') or ('12' in i)
Run Code Online (Sandbox Code Playgroud)
所以,第一部分总是真的.这就是为什么所有这些都被印刷的原因.在第二种情况下,
('11') and ('12' in i)
Run Code Online (Sandbox Code Playgroud)
这里,第一部分总是Truthy,所以它只打印包含的项目12.你可能想要做
if '11' in i and '12' in i:
Run Code Online (Sandbox Code Playgroud)
要么
if all(item in i for item in ('11', '12')):
Run Code Online (Sandbox Code Playgroud)
要拥有或有条件,你可以使用这样的any功能
if any(item in i for item in ('11', '12')):
Run Code Online (Sandbox Code Playgroud)