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

如何比较两个元素为Car对象列表的等长pandas.Series,判断对应行对象是否存在

问题解决方法

问题根源

Python 自定义类默认的成员判断(in操作符)、相等判断(==)都是基于实例的内存地址实现的,不会主动比对类的属性。你代码中的car1和carB虽然品牌、颜色、里程完全一致,但属于两个独立创建的实例,内存地址不同,因此car1 in [carB]会直接返回False,这就是运行结果全为False的原因。

解决方案1:给Car类自定义相等判断规则(推荐)

给Car类新增__eq__魔法方法,自定义实例相等的判断逻辑,后续所有相等判断、成员存在性判断都会自动复用该规则:

class Car:
    def __init__(self, brand, color, mileage):
        self.brand = brand
        self.color = color
        self.mileage = mileage
    
    # 新增相等判断逻辑
    def __eq__(self, other):
        if not isinstance(other, Car):
            return False
        return self.brand == other.brand and self.color == other.color and self.mileage == other.mileage

新增该方法后,你原有的compare_parkings函数无需修改,只需要在得到二维结果后压平为一维列表,即可得到你预期的输出:

diff = compare_parkings(parking1, parking2)
# 压平二维列表
diff = [item for level in diff for item in level]
# 此时diff = [True, False, False, True],符合预期

解决方案2:不修改Car类,直接修改比对逻辑

如果你不想改动原有Car类的实现,可以直接修改对比函数里的判断逻辑,手动比对属性判断车辆是否存在:

def compare_parkings(park1, park2):
    diff = list()
    for level1, level2 in zip(park1, park2):
        for car in level1:
            # 手动遍历比对属性判断是否存在
            exists = any(c.brand == car.brand and c.color == car.color and c.mileage == car.mileage for c in level2)
            diff.append(exists)
    return diff

直接运行该函数即可得到你预期的一维结果[True, False, False, True]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:24:10