使用“ is”身份而不是“ ==”等式检查对象是否处于可迭代状态

if object in lst:
    #do something

据我所知,执行此语句时,它是内部检查==object中每个元素之间的lst,后者将引用__eq__这两个对象的方法。这可能意味着两个不同的对象是“相等的”,如果它们的所有属性都相同,通常就需要这样做。

但是,有没有一种方法可以通过Python实现诸如in之类的谓词,其中基础相等性检查为is-即我们实际上是在检查两个引用是否指向同一个对象? / p>

cmswwy 回答:使用“ is”身份而不是“ ==”等式检查对象是否处于可迭代状态

使用any函数:

if any(x is object for x in lst):
    # ...
, python中的

3list成员资格由__contains__ dunder方法决定。如果要使用常规的“ in”语法,可以选择为自定义实现覆盖此内容:

class my_list(list):
    def __contains__(self,x):
        for y in self:
            if x is y:
                return True

        return False


4 in my_list([4,[3,2,1]])

>> True

[3,1] in my_list([4,1]])  # Because while the lists are "==" equal,they have different pointers.

>>> False

否则,我建议kaya3使用生成器检查的答案。

,

如果您要专门使用is,则只需使用以下过滤器即可:

filtered_list = filter(lambda n: n is object,list)
本文链接:https://www.f2er.com/3156697.html

大家都在问