Python中的运算符如果声明

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中运算符功能的理解完全错误?

the*_*eye 5

'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)