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

如何从二维列表中筛选含多组重复元素的子列表并前置重复元素

问题:筛选并重组二维列表中满足重复条件的子列表

我有一个大型二维列表,部分子列表中存在重复元素。需要筛选出包含至少两组出现2次及以上的重复元素的子列表,对这些子列表将重复元素(每个只保留一个)放在前面,其余元素(去重后)放在后面。

示例输入

Df =[[2,3,5,20],[5,10,20,10],[4,13,15,15,17,34,17],[33,34,15,21],[12,16,24,32,12,33,24]]

期望输出

Df2 = [[15,17,4,13,34],[12,24,16,32,33]]

我的尝试(未满足需求)

这段代码只能筛选出存在重复元素的子列表,但无法识别“至少两组重复元素”的条件:

res = [t for t in Df if len(t) > len(set(t))]

解决方案

我们可以借助collections.Counter来统计元素出现次数,分三步完成需求:

  1. 统计每个子列表中元素的出现次数;
  2. 筛选出包含至少2个重复元素(出现≥2次)的子列表;
  3. 重组子列表:重复元素在前,非重复元素在后。

完整代码

from collections import Counter

Df =[[2,3,5,20],[5,10,20,10],[4,13,15,15,17,34,17],[33,34,15,21],[12,16,24,32,12,33,24]]
Df2 = []

for sublist in Df:
    # 统计子列表内各元素的出现次数
    elem_count = Counter(sublist)
    # 提取所有出现2次及以上的元素(自动去重)
    duplicate_elems = [num for num, cnt in elem_count.items() if cnt >= 2]
    # 满足至少两组重复元素的条件才处理
    if len(duplicate_elems) >= 2:
        # 提取非重复元素(去重且不属于重复元素集合)
        non_duplicate_elems = [num for num in set(sublist) if num not in duplicate_elems]
        # 重组并加入结果列表
        Df2.append(duplicate_elems + non_duplicate_elems)

print(Df2)

代码说明

  • Counter(sublist):快速统计子列表中每个元素的出现次数,返回键为元素、值为次数的字典;
  • duplicate_elems:收集所有出现≥2次的元素,因为Counter的键本身是唯一的,所以无需额外去重;
  • 条件判断len(duplicate_elems) >= 2:确保只处理符合要求的子列表;
  • non_duplicate_elems:筛选出不属于重复元素的其他元素,用set(sublist)去重后避免重复;
  • 最后将重复元素列表和非重复元素列表拼接,得到符合要求的子列表。

运行代码后,输出结果与期望完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:25:32