You need to enable JavaScript to run this app. Python处理大嵌套列表时如何快速去重最内层元素
优惠活动
大模型
产品
解决方案
定价
更多

Python处理大嵌套列表时如何快速去重最内层元素

为什么你的方法慢

问题根本出在用来记录见过的元素的seen是个普通列表:每次判断某个元素有没有出现过,都得把整个seen从头扫一遍比对。元素少的时候没感觉,一旦列表规模上来,这种逐行遍历的累计耗时会涨得特别快,自然就卡了。
顺带提一句你原代码里的小bug:函数定义的参数是seq,但实际扁平化的时候硬编码遍历了全局变量t,传其他列表进去是不会生效的。

快几十倍的改法

只要把存已见元素的结构换成哈希集合就行——集合的查找、插入操作都是常数级耗时,和元素总量没关系,整体直接变成线性的处理速度,性能是数量级的提升。
有个小细节要注意:集合只能存可哈希的对象,你最内层的元素是列表,没法直接塞集合里,只要把列表转成同内容的元组当判重的键就好,完全不影响比对结果。

给你个和你原逻辑完全一致(保留第一次出现的顺序、不改动原列表结构)的实现:

def get_unique_list(seq):
    seen = set()
    res = []
    for sublist in seq:
        for item in sublist:
            # 转成元组做判重的key
            key = tuple(item)
            if key not in seen:
                seen.add(key)
                res.append(item)
    return res

效果说明

  • 哪怕是十万、百万级的元素量,也就几百毫秒的事,不会像原方法那样卡半天
  • 判重规则和你原来的写法完全一样:只有整个最内层列表所有元素都完全相同,才会被当成重复项去掉
  • 返回的结构和你输入的嵌套列表格式完全一致,不会因为判重把列表转成元组改了格式

如果不需要严格保留元素的出现顺序,还能再压两行走集合去重,但大部分场景下列表顺序是有意义的,上面的写法已经是兼顾性能和可用性的最优解了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 19:15:04