【python】3个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 秒

最后:一个小小的请求

不知不觉在 ZEEKLOG 分享技术笔记快 3年了,目前粉丝数 3955,距离 “优质创作者” 认证的 5000 粉丝目标还差 1045 个~如果你觉得这篇文章的技巧对你有帮助,或者想持续获取 Python、后端开发相关的干货内容,麻烦点击左上角【关注】 支持一下!非常感谢 !!!

后续会陆续更新更多实战教程(比如 “Python 爬虫避坑指南”“后端性能优化技巧”),关注后就能第一时间收到推送。每一个关注都是对我坚持分享的最大鼓励,感谢大家的支持,咱们下篇文章见!

Read more

Flutter 组件 ubuntu_service 适配鸿蒙 HarmonyOS 实战:底层系统服务治理,构建鸿蒙 Linux 子系统与守护进程交互架构

Flutter 组件 ubuntu_service 适配鸿蒙 HarmonyOS 实战:底层系统服务治理,构建鸿蒙 Linux 子系统与守护进程交互架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 ubuntu_service 适配鸿蒙 HarmonyOS 实战:底层系统服务治理,构建鸿蒙 Linux 子系统与守护进程交互架构 前言 在鸿蒙(OpenHarmony)生态迈向工业互联、智能车载及深度客制化终端的背景下,如何实现 Flutter 应用对底层 Linux 服务(如 Systemd/DBus)的受控访问、在端侧治理长驻守护进程,已成为提升应用系统级集成能力的“技术门槛”。在鸿蒙设备这类强调内核级安全防护与微内核分布式调度的环境下,如果应用仅能实现表层 UI 的交互,而无法感知、重启或监控底层硬件驱动相关的后台服务,就无法在大屏中控、工业看板或服务器管理设备中胜任“控制塔”的角色。 我们需要一种能够穿透沙箱壁垒、支持 DBus 通信协议且具备高可靠服务状态感知能力的系统治理方案。 ubuntu_service 为

Flutter 组件 serverpod_swagger 的适配 鸿蒙Harmony 实战 - 驾驭 API 文档自动化、实现鸿蒙端全栈联调与 Swagger UI 动态审计方案

Flutter 组件 serverpod_swagger 的适配 鸿蒙Harmony 实战 - 驾驭 API 文档自动化、实现鸿蒙端全栈联调与 Swagger UI 动态审计方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 serverpod_swagger 的适配 鸿蒙Harmony 实战 - 驾驭 API 文档自动化、实现鸿蒙端全栈联调与 Swagger UI 动态审计方案 前言 在鸿蒙(OpenHarmony)的大型项目研发中,前端(鸿蒙应用)与后端(Dart Server)的沟通效率,往往直接决定了产品的上线节奏。传统的“手动维护 API 文档”模式,不仅耗时耗力,更由于文档与代码的脱节,导致了大量“因为 API 字段改动而引发的 Crash”。 我们需要一种“代码即文档”的高阶自动化生产力。 serverpod_swagger 是 Serverpod

Flutter 组件 ninja_prime 的适配 鸿蒙Harmony 实战 - 驾驭极致高性能数值计算、实现鸿蒙端加密基石与逻辑加速审计方案

Flutter 组件 ninja_prime 的适配 鸿蒙Harmony 实战 - 驾驭极致高性能数值计算、实现鸿蒙端加密基石与逻辑加速审计方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 ninja_prime 的适配 鸿蒙Harmony 实战 - 驾驭极致高性能数值计算、实现鸿蒙端加密基石与逻辑加速审计方案 前言 在鸿蒙(OpenHarmony)生态的极速加密通讯协议开发、基于区块链的分布式政务存证系统以及需要执行海量数据完整性指纹校验的各类专业级应用中,“数值计算的处理效能”是决定应用能否通过 0307 批次严苛性能红线的关键命门。面对涉及 2048 位以上的大数哈希(Large BigInt Hashing)、秒级内的超大规模素数判定(Primality Testing)或者是需要为复杂的 0307 批次资产金融模型执行高精度的科学运算。如果仅仅依靠 Dart 原生的数值类型或未经过度优化的通用算法库。不仅会导致在处理大型数值时产生令人难以忍受的 UI 线程阻塞,更会因为计算效率过低,引发严重的系统功耗异常。 我们需要一种“逻辑纯粹、计算爆发”的数值艺术。 ninja_prime

Flutter 三方库 rx_storage 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、响应式、反应灵敏的本地 Key-Value 存储同步引擎

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 rx_storage 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、响应式、反应灵敏的本地 Key-Value 存储同步引擎 在鸿蒙(OpenHarmony)系统开发中,如何实现在本地配置(如主色调、用户登录态)修改后,应用内的所有 UI 组件都能瞬间感知并自动刷新?底层的 SharedPreferences 只有读写,没有“推送”。rx_storage 为鸿蒙开发者提供了一套基于 Rx(ReactiveX)流的响应式存储代理方案。本文将深入实战其在鸿蒙生态中的应用。 前言 什么是 Rx Storage?它是一个对持久化存储(如 shared_preferences)的高级封装。它的核心价值在于:每一次对硬盘数据的写入(Set)

阿里云全品类 8 折券限时领,建站 / AI / 存储通用 立即领取