【发布时间】:2015-08-06 16:36:12
【问题描述】:
in 运算符使用比较来测试等价性,但 Python 的比较并不精确,因为 True == 1 和 0 == False,产生 -
>>> True in [ 1 ]
True
>>> False in [ 0 ]
True
>>> 1 in [ True ]
True
>>> 0 in [ False ]
True
而我需要一个精确的比较(类似于其他语言中的 ===),这将在上述所有示例中产生 False。我当然可以遍历列表:
res = False
for member in mylist:
if subject == member and type( subject ) == type( member ):
res = True
break
这显然比使用内置 in 运算符效率低得多,即使我将其打包为列表理解。是否有 in 的本地替代方案,例如列表方法或调整 in 行为以获得所需结果的某种方式?
in 运算符在我的案例中用于测试所有列表成员的唯一性,因此本地唯一性测试也可以。
重要提示:该列表可能包含可变值,因此不能使用set。
Python 版本是 3.4,对于在 2.7 上运行的解决方案来说也很棒。
编辑给所有建议使用IS的人:
- 我正在寻找
a in b的非迭代原生替代方案。 -
is运算符与这种情况无关。例如,在以下情况下,in可以正常工作,但is不会:>>> [1,2] in [[1,2]] True
请在回答之前阅读问题...
【问题讨论】:
-
您正在寻找
is运算符:if any(x is True for x in l): ... -
@Blender 在我说我正在寻找本机解决方案的问题中,我知道如何迭代列表,正如您从问题中看到的那样......此外,
is不会不适用于列表、字典、类等其他类型,我需要的比较是根据问题,类似于其他语言的 === -
在
YourClass.__eq__总是返回True的对象的情况下===将如何工作? -
@Blender,就像
in一样。到目前为止,我发现in中断的唯一情况是您希望 1 和 True、0 和 False 不相等。
标签: python