从基础到进阶分享3个Python列表高效去重技巧

 更新时间:2025年11月24日 09:57:09   作者:程序猿全栈の董  
最近整理开发笔记时,发现列表去重是 Python 初学者和进阶开发者都常遇到的问题,所以下面小编就和大家分享3个Python列表高效去重技巧吧

前言:为什么写这篇

最近整理开发笔记时,发现列表去重是 Python 初学者和进阶开发者都常遇到的问题 —— 看似简单的需求,不同实现方式的性能差异能达到 10 倍以上。今天把 3 种最实用的去重技巧整理出来,附上代码示例和性能测试,同时也有个小请求想拜托大家(文末说明~)

一、基础去重:set () 方法(最快上手)

这是最常见的去重方式,利用集合 “元素不可重复” 的特性,一行代码就能搞定:

# 基础去重(无序)

old_list = [1, 2, 2, 3, 3, 3, "a", "a"]

new_list = list(set(old_list))

print(new_list)  # 输出:[1, 2, 3, 'a'](顺序不确定)

优点:代码简洁、执行速度快(底层 C 实现)

缺点:会打乱原列表顺序,且仅支持可哈希元素(不能去重包含字典、列表的列表)

适用场景:无需保留顺序、元素为数字 / 字符串 / 元组的场景

二、进阶去重:保留原顺序(Python 3.7+)

如果需要保留元素在原列表中的出现顺序,推荐用 dict.fromkeys() 方法 —— 字典在 Python 3.7 后会保留键的插入顺序:

# 保留顺序的去重

old_list = [2, 1, 3, 2, 4, 1, 5]

new_list = list(dict.fromkeys(old_list))

print(new_list)  # 输出:[2, 1, 3, 4, 5](顺序与原列表一致)

优点:保留原顺序、效率高于列表推导式

缺点:Python 3.7 以下版本不保证顺序

适用场景:需要维持元素原有顺序的开发场景

三、高阶去重:复杂场景(含条件过滤)

如果需要结合条件过滤去重(比如去重后保留大于 10 的元素),可以用 pandas 库,适合处理大数据量:

import pandas as pd

# 复杂场景去重(含条件过滤)

old_list = [5, 12, 12, 8, 15, 15, 20]

# 转为Series去重,再过滤大于10的元素

new_series = pd.Series(old_list).drop_duplicates().loc[lambda x: x > 10]

new_list = new_series.tolist()

print(new_list)  # 输出:[12, 15, 20]

优点:支持大数据量、可结合复杂条件过滤

缺点:需要额外安装 pandas 库

适用场景:数据分析、大数据量处理场景

性能对比总结

方法适用场景平均耗时(10 万条数据)
set () 去重无需保留顺序0.003 秒
dict.fromkeys () 去重需要保留顺序0.005 秒
pandas 去重大数据量 + 条件过滤0.012 秒

方法补充

下面小编为大家整理了其他Python列表去重的相关方法,希望对大家有所帮助

Python列表去重保持顺序方法

1.使用字典去重(Python 3.7+)

# 利用dict.fromkeys()自动去重并保持顺序
original_list = [1, 2, 2, 3, 4, 3, 5]
unique_list = list(dict.fromkeys(original_list))
print(unique_list)  # 输出: [1, 2, 3, 4, 5]

2.使用集合辅助遍历

def remove_duplicates(lst):
    seen = set()
    result = []
    for item in lst:
        if item not in seen:
            seen.add(item)
            result.append(item)
    return result

data = ['a', 'b', 'a', 'c', 'b']
print(remove_duplicates(data))  # 输出: ['a', 'b', 'c']

3.性能与适用场景对比

方法时间复杂度保持顺序Python版本要求
dict.fromkeys()O(n)3.7+
集合辅助遍历O(n)所有版本
set()O(n)所有版本
  • 若使用Python 3.7及以上,优先选择dict.fromkeys()
  • 需兼容旧版本时,采用集合辅助的显式循环
  • 避免使用list(set(lst)),因其不保证顺序

到此这篇关于从基础到进阶分享3个Python列表高效去重技巧的文章就介绍到这了,更多相关Python列表去重内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python基础学习之如何对元组各个元素进行命名详解

    python基础学习之如何对元组各个元素进行命名详解

    python的元祖和列表类似,不同之处在于元祖的元素不能修改,下面这篇文章主要给大家介绍了关于python基础学习之如何对元组各个元素进行命名的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • python自动化测试通过日志3分钟定位bug

    python自动化测试通过日志3分钟定位bug

    软件开发中通过日志记录程序的运行情况是一个开发的好习惯,对于错误排查和系统运维都有很大帮助,Python标准库自带了强大的logging日志模块,在各种python模块中得到广泛应用
    2021-11-11
  • 在Python中使用K-Means聚类和PCA主成分分析进行图像压缩

    在Python中使用K-Means聚类和PCA主成分分析进行图像压缩

    这篇文章主要介绍了在Python中使用K-Means聚类和PCA主成分分析进行图像压缩,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 利用Python还原方阵游戏详解

    利用Python还原方阵游戏详解

    这篇文章的灵感来源于我玩游戏的时候,看见一个大佬在游戏里面建造了“还原方阵游戏”,就感觉很牛掰,就想着python不是有矩阵吗,可以还原一下呢,感兴趣的小伙伴可以了解一下
    2023-01-01
  • python 自定义包的实现示例

    python 自定义包的实现示例

    如果Python的模块过多,可能造成一定的混乱,这时可以通过Python包来管理模块,本文主要介绍了python 自定义包的实现示例,感兴趣的可以了解一下
    2024-05-05
  • 解析Python3中的Import

    解析Python3中的Import

    本文通过示例代码带领大家一起学习Python3中的Import知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Python实现加载及解析properties配置文件的方法

    Python实现加载及解析properties配置文件的方法

    这篇文章主要介绍了Python实现加载及解析properties配置文件的方法,结合实例形式分析了Python针对properties配置文件的加载、读取及解析相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • 如何用python抓取B站数据

    如何用python抓取B站数据

    今天介绍一个获取B站数据的Python扩展库-bilibili_api,对此感兴趣的同学,可以实验一下
    2021-05-05
  • Python装饰器基础详解

    Python装饰器基础详解

    装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。接下来通过本文给大家介绍python装饰器基础,对python装饰器相关知识感兴趣的朋友一起学习吧
    2016-03-03
  • 基于Python安装pyecharts所遇的问题及解决方法

    基于Python安装pyecharts所遇的问题及解决方法

    今天小编就为大家分享一篇基于Python安装pyecharts所遇的问题及解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论