首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用" is“标识而不是"==”相等检查对象是否在可迭代中

使用" is“标识而不是"==”相等检查对象是否在可迭代中
EN

Stack Overflow用户
提问于 2019-11-06 04:10:38
回答 3查看 67关注 0票数 0
代码语言:javascript
复制
if object in lst:
    #do something

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

然而,有没有一种方法可以在底层相等检查为is的情况下,以Pythonically的方式实现像in这样的谓词--也就是说,我们实际上是在检查这两个引用是否指向同一个对象?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-06 04:13:07

使用any函数:

代码语言:javascript
复制
if any(x is object for x in lst):
    # ...
票数 0
EN

Stack Overflow用户

发布于 2019-11-06 04:24:42

3Python中的列表成员由__contains__ dunder方法规定。如果您想使用普通的"in“语法,您可以选择覆盖自定义实现的这一点:

代码语言:javascript
复制
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,2,1] in my_list([4, [3,2,1]])  # Because while the lists are "==" equal, they have different pointers.

>>> False

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

票数 0
EN

Stack Overflow用户

发布于 2019-11-06 04:13:13

如果您想专门使用is,那么只需使用filter,如:

代码语言:javascript
复制
filtered_list = filter(lambda n: n is object, list)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58718720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档