【问题标题】:Find object in a python list using the 'in' operator使用“in”运算符在 python 列表中查找对象
【发布时间】:2018-02-18 21:52:32
【问题描述】:

是否可以做一些看起来像这样的事情:

if obj in a_list_of_the_same_obj_type:
     #do stuff

我的 obj 已经有 __eq____ne__ 函数在属性上进行比较,所以我认为 in 关键字会调用它,但它看起来不像。

【问题讨论】:

  • 提示:__contains__
  • 你用的是什么代码?
  • 我做了一个小实验,__eq__ 肯定被in 用于列表。问题可能出在您的 __eq____ne__ 的实现上。
  • 会员测试需要__hash__ 而不是__eq__。该测试通常读取“此 obj 在此序列中”而不是“该序列包含与我的对象相等的对象”,因此成员资格测试对于不可变对象最实用。
  • 正如@morsecodist 提到的,__eq__ 肯定被使用,而我的__eq__ 实现是问题所在。

标签: python list keyword


【解决方案1】:

在这种情况下,运算符'in'调用python内置列表对象的__contains__(),然后调用你的对象的__eq__(),所以确保你的obj中的__eq__()dunder方法-类已正确实现。

【讨论】:

    【解决方案2】:

    您需要实现__contains__ 才能测试成员资格

    【讨论】:

    • 这个问题让他看起来像是在使用 list 对象,而不是自定义类型。
    • 同意。 in 正在列表上被调用,因此它是调用了 __contains__ 方法的列表。还是我错过了什么?
    • 我部分同意,但 OP 说 __eq__ 已经实现。如果这是自定义类的列表,并且目标是测试同一类的成员资格 - __eq__ 如果绝对足够的话。如果这不起作用,我认为a_list_of_the_same_obj_type 不支持迭代协议。
    • @Slam 这就是答案;)我刚用过。
    猜你喜欢
    • 1970-01-01
    • 2018-04-15
    • 2015-02-19
    • 2016-01-29
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多