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

如何删除列表mg中的重复Meg对象?需保留原有读取逻辑

删除Meg对象列表中的重复实例

已知现有Python代码生成了包含重复Meg实例的列表mg,要求在不修改Meg类定义、数据读取方法及mg变量初始化逻辑的前提下,实现列表去重(重复判定标准:ss、rr、cd三个属性值完全一致)。

方法一:基于属性元组的遍历筛选

通过集合记录已出现过的对象属性组合,遍历原列表时只保留首次出现的实例:

if __name__ == '__main__':     
    # 以下为不可修改的原有代码
    lines=['842',
            '81 842 81',
            '842 81 81',
            '81 842 81',
            '842 81 81',
            '82 842 82',
            '82 842 82',
            '83 842 83',
            '842 83 83']         
    idd = lines[0].rstrip()
    mg = []
    for line in lines[1:]:
        if not line:
            break
        ss, rr, cd = line.split( ' ')
        mg.append(Meg(ss,rr,cd.rstrip(),),)
    
    # 去重逻辑(新增部分)
    seen = set()
    unique_mg = []
    for item in mg:
        # 将对象属性转为可哈希的元组作为唯一标识
        attr_tuple = (item.ss, item.rr, item.cd)
        if attr_tuple not in seen:
            seen.add(attr_tuple)
            unique_mg.append(item)
    
    # 打印验证去重结果
    for obj in unique_mg:
        print(f"ss={obj.ss}, rr={obj.rr}, cd={obj.cd}")

方法二:列表推导式简化实现

利用赋值表达式(Python 3.8+支持)简化代码逻辑,效果和方法一完全一致:

if __name__ == '__main__':     
    # 不可修改的原有代码
    lines=['842',
            '81 842 81',
            '842 81 81',
            '81 842 81',
            '842 81 81',
            '82 842 82',
            '82 842 82',
            '83 842 83',
            '842 83 83']         
    idd = lines[0].rstrip()
    mg = []
    for line in lines[1:]:
        if not line:
            break
        ss, rr, cd = line.split( ' ')
        mg.append(Meg(ss,rr,cd.rstrip(),),)
    
    # 去重逻辑(新增部分)
    seen = set()
    unique_mg = [item for item in mg if not ((attr_tuple := (item.ss, item.rr, item.cd)) in seen or seen.add(attr_tuple))]
    
    # 验证结果
    for obj in unique_mg:
        print(f"ss={obj.ss}, rr={obj.rr}, cd={obj.cd}")

关键说明

  • 由于无法修改Meg类,不能通过重写__eq__和__hash__方法让对象直接支持集合去重,因此通过提取属性元组的方式间接实现唯一性判断。
  • 两种方法均保留了原列表中每个重复组的第一个实例,若需要保留最后一个实例,只需反向遍历原列表后再反转结果即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:55:18