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

如何去除嵌套列表中前两元素重复或逆序重复的子列表

嵌套列表去重问题

我有一个嵌套列表:

original_list = [[1, 2, '0.68', 1.24], [1, 2, '0.43', 2.39], [3, 0, '0.91', 3.61], [0, 3, '0.08', 3.95], [3, 0, '0.08', 5.17]]

需求

需要删除满足以下任一条件的子列表,仅保留每组中的第一个元素:

  • 子列表前两个元素完全相同(例如[1, 2, '0.68', 1.24]和[1, 2, '0.43', 2.39],保留其一)
  • 子列表前两个元素顺序相反(例如[3, 0, '0.91', 3.61]和[0, 3, '0.08', 3.95],保留其一)

期望输出

[[1, 2, '0.68', 1.24], [3, 0, '0.91', 3.61]]

尝试的代码及问题

我写了如下代码,但无法得到正确结果:

def delete_Duplicate(liste):
   for li in liste: 
     for li2 in liste:
       if (li[0] == li2[0] and li[1] == li2[1] ) or (li[1] == li2[0] and li[0] == li2[1] ):
           liste.pop(liste.index(li2))
    return liste

这段代码存在两个核心问题:

  1. 遍历中修改原列表:直接对正在遍历的列表执行pop操作,会打乱遍历的索引顺序,导致部分元素被跳过或重复处理。
  2. 误删自身:当li和li2指向同一个子列表时,条件也会成立,导致误删当前遍历的元素。

正确解法

通过维护一个存储已处理特征的集合,用子列表前两个元素的排序元组作为特征(这样(1,2)和(2,1)会被视为同一个特征,(3,0)和(0,3)同理),遍历列表时仅保留每个特征对应的第一个子列表。

代码实现:

def delete_Duplicate(liste):
    seen_features = set()
    filtered_list = []
    for sublist in liste:
        # 生成排序后的特征元组,统一标识相同/相反的前两个元素
        feature = tuple(sorted(sublist[:2]))
        if feature not in seen_features:
            seen_features.add(feature)
            filtered_list.append(sublist)
    return filtered_list

# 测试执行
original_list = [[1, 2, '0.68', 1.24], [1, 2, '0.43', 2.39], [3, 0, '0.91', 3.61], [0, 3, '0.08', 3.95], [3, 0, '0.08', 5.17]]
print(delete_Duplicate(original_list))

执行后输出:

[[1, 2, '0.68', 1.24], [3, 0, '0.91', 3.61]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:06:33