这是我拥有的一段简单的代码:
>>> 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')):
要有或条件,你可以使用任何函数,像这样
if any(item in i for item in ('11', '12')):
