You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义List类__eq__方法始终返回False的原因排查

修复你的List类__eq__方法问题

嘿,我来帮你搞定这个__eq__方法总是返回False的问题~

首先得说,你现在的__eq__实现有两个关键问题:

  • 你把self.array和other直接比较,但other应该是另一个List类的实例,不是数组对象,所以数组和List实例对比肯定不相等,直接返回False。
  • 就算你改成对比两个实例的array属性,也不对——因为你的数组是有预设容量的,比如一个List的max_capacity是50,另一个是100,哪怕它们实际存储的元素完全一样,整个数组对比也会因为后面的空元素/容量差异返回False,但我们的List应该只关心实际存储的元素,也就是前count个值。

给你修改后的__eq__方法,完全符合预期:

def __eq__(self, other):
    # 先判断对方是不是同类型的List实例,不是的话直接不相等
    if not isinstance(other, List):
        return False
    # 如果两个List的元素数量不一样,肯定不相等
    if self.count != other.count:
        return False
    # 逐个对比每个实际存储的元素
    for i in range(self.count):
        if self.array[i] != other.array[i]:
            return False
    # 所有检查都通过,说明两个List相等
    return True

为啥这个版本能行?

  1. 类型检查:先确保other是List类的实例,避免和其他类型(比如原生list、字符串)对比时出错。
  2. 数量校验:如果两个List的元素数量不同,直接返回False,没必要继续对比。
  3. 元素逐个对比:只对比前count个元素,忽略数组中未使用的容量部分——这才符合我们对“列表相等”的定义:元素顺序、值完全一致,和底层数组的容量无关。

举个例子,你现在创建两个容量不同但元素相同的List:

list_a = List(max_capacity=50)
list_a.append(10)
list_a.append(20)

list_b = List(max_capacity=100)
list_b.append(10)
list_b.append(20)

用修改后的方法对比list_a == list_b会返回True,这才是正确的结果~

内容的提问来源于stack exchange,提问作者Sook Lim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:47:19