python列表去重,一行实现 太优雅~

news2024/9/20 18:35:39

今天咱们来聊聊在 Python 中如何优雅地实现列表去重。

这是一个非常经典的问题,虽然很多人都会,但如何更优雅的实现呢?这里有不少有趣的解决方法。话不多说,咱们直奔主题。

方法一:用 set 去重

先来看个最简单的方法,用 set。set 是 Python 的一个数据类型,具有去重功能。代码非常简洁,直接一行就搞定了:

这段代码运行后会输出:

✨ 优点:简单高效,代码量少,性能好。

⚠️ 缺点:可能会改变原始数据的顺序。如果你对顺序很在意,那这个方法可能就不适合你了。

💡 小贴士:其实在大多数情况下,顺序不重要时,这个方法是非常实用的。如果要保留顺序,我们需要看其他方法。

方法二:用列表推导式

如果你希望保留原始数据的顺序,可以试试列表推导式。虽然代码稍长,但依然是可以在一行内实现的。

这段代码运行后会输出:

✨ 优点:保留了原始顺序。

⚠️ 缺点:效率较低,尤其是列表很大的时候,性能就不太理想了。因为每次都要检查 unique_list 是否已经包含该元素,时间复杂度是 O(n^2)。

💡 小贴士:在小数据集上这个方法还是不错的,代码也比较直观。

方法三:用 collections.Counter

如果你既想保留原始顺序,又想要高效的方法,collections.Counter 是个不错的选择。Counter 是 collections 模块里的一个类,用于计数,这里我们可以利用它的特性来实现去重。

这段代码运行后会输出:

✨ 优点:保留原始顺序,效率高,一行代码搞定。

⚠️ 缺点:需要引入 collections 模块,不过这个模块是标准库的一部分,所以不用担心额外安装问题。

💡 小贴士:这是个很优雅的方法,既考虑了效率又保留了顺序,推荐使用。

方法四:用 dict.fromkeys

其实,还有一种高效保留顺序的方法,就是利用 dict.fromkeys。Python 3.7+ 中,字典是有序的(Python 3.6 中的 CPython 实现也是有序的)。

这段代码运行后会输出:

✨ 优点:保留原始顺序,效率高。

⚠️ 缺点:可能不太直观,需要知道字典有序的特性。

💡 小贴士:这个方法的代码非常简洁,而且性能也很不错,特别是在 Python 3.7+ 的环境下。

方法五:用 pandas

如果你熟悉 pandas 库,并且已经在使用它进行数据处理,那你也可以用 pandas 来实现列表去重。pandas 的 unique 函数非常方便。

这段代码运行后会输出:

✨ 优点:保留原始顺序,代码简洁。

⚠️ 缺点:需要引入 pandas 库,适合已经在使用 pandas 的场景。

💡 小贴士:在处理大型数据集时,pandas 是个很强大的工具,值得学习和使用。

方法六:用 numpy

如果你在进行数值计算,可以用 numpy 来去重。numpy 的 unique 函数同样方便快捷。

这段代码运行后会输出:

✨ 优点:保留原始顺序,代码简洁,适合数值计算。

⚠️ 缺点:需要引入 numpy 库,适合已经在使用 numpy 的场景。

💡 小贴士:如果你从事科学计算或工程应用,numpy 是不可或缺的工具。

总结下来,不同的方法各有优劣。对于小数据集或不关心顺序的情况,用 set 最简单高效;如果需要保留顺序且数据量不大,列表推导式和 collections.Counter 是不错的选择;如果追求高效且保留顺序,dict.fromkeys 是个好选择;对于已经在使用 pandas 或 numpy 的场景,这两个库也提供了方便的方法。

希望这些方法能帮助你更好地处理列表去重的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2079431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言基础(二十一)

C语言中的链表是一种常见的数据结构,用于存储一系列的元素,但与数组不同的是,链表中的元素在内存中不是连续存储的。链表中的每个元素称为节点(Node),每个节点包含两个部分:一部分是存储数据的数…

智能开发工具GoLand v2024.2全新发布——更好地支持Go框架和语言

GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议,通过一步撤消快速安全重构,智能代码完成,死代码检测和文档提示帮助所有 Go 开发人员,从新手到经验丰富的专业人士,创建快速、高效、和可靠的…

美创科技荣获“中国数据安全领域最具商业合作价值企业”

近日,数据智能产业创新服务媒体“数据猿”联合上海大数据联盟正式发布《2024中国数据安全领域最具商业合作价值企业盘点》,美创科技凭借在数据安全领域专业领先能力,荣获“最具商业合作价值企业”。 《2024中国数据安全领域最具商业合作价值企…

【Qt】Qt系统 | Qt文件

文章目录 一. 输入输出设备类二. 文件读写类三. 文件和目录信息 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力,封装了很多关于文件的类,通过这些类能够对文件系统进行操作,如文件读写、文…

Ubuntu上搭建Nginx环境

1. 软件包下载 nginx下载地址 下载linux版本的nginx,如图圈示 2. 将下载好的软件包上传至Linux服务器 假设上传到 /opt/nginx 目录,进入目录 cd /opt/nginx解压,根据版本自行修改版本号 tar zxvf nginx-1.16.0.tar.gz3.安装 安装编译所需的依赖&a…

IGE-LIO:充分利用强度信息克服激光退化场景下的定位精度

更多优质内容,请关注公众号:智驾机器人技术前线 1.论文信息 论文标题:IGE-LIO: Intensity Gradient Enhanced Tightly-Coupled LiDAR-Inertial Odometry 作者:Ziyu Chen, Hui Zhu, Biao Yu, Chunmao Jiang, Chen Hua, Xuhui Fu a…

android openGL ES详解——深度缓冲区

一、深度缓冲区概念 深度缓存区是指一块专门内存区域,存储在显存中,用于存储屏幕上所绘制图形的每个像素点的深度值。深度值越大,离观察者越远。深度值越小,里观察者越近。 深度缓冲区与帧缓冲区相对应,用于记录上面…

Linux 进程 | 进程优先级进程的环境变量

文章目录 进程概念4、进程优先级4.1基本概念4.2查看系统进程4.2.1 ps -l4.2.2 PRI & NI 4.3用top命令更改已存在进程的nice: 5、环境变量5.1常见环境变量5.2查看环境变量5.3测试PATH配置环境变量 5.4代码中获取环境变量5.4代码中获取环境变量 进程概念 4、进程…

Linux网络:TCP UDP socket

Linux网络:TCP & UDP socket socket 套接字sockaddr网络字节序IP地址转换bzero UDP socketsocketbindrecvfromsendto TCP socketsocketbindlistenconnectacceptsendrecv 本博客讲解 Linux 下的 TCP 和 UDP 套接字编程。无论是创建套接字、绑定地址,还…

软件设计师全套备考系列文章16 -- 程序设计语言基础知识

软考-- 软件设计师(16)-- 程序设计语言基础知识 文章目录 软考-- 软件设计师(16)-- 程序设计语言基础知识前言一、章节考点二、基本概念三、文法四、有限自动机五、前缀、中缀、后缀表达式六、传值和引用(传址)七、各个程序语言的…

链表OJ题——使用栈实现单链表的逆序打印

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 题目描述&#xff1a;使用栈&#xff0c;实现单链表的逆序打印 二、解题思路 三、解题代码 /*** 非递归实现单链表的顶逆序打印——>通过栈来实现* param*/public void printReverseListFromStack(){Stack<…

HAL库:GPIO唤醒模式 唤醒睡眠模式下的单片机

目录 HAL库&#xff1a;GPIO唤醒模式 唤醒睡眠模式下的单片机 注意事项&#xff1a; 初始化部分&#xff1a; 主函数测试部分 结果如图 HAL库&#xff1a;GPIO唤醒模式 唤醒睡眠模式下的单片机 注意事项&#xff1a; HAL库滴答定时器默认为打开状态&#xff0c;需要关闭…

AI学习指南深度学习篇:循环神经网络(RNN)Python实践

引言 在人工智能的广袤领域中,循环神经网络(Recurrent Neural Networks, RNNs)因其在处理序列数据中的卓越表现而广受关注。RNN的独特之处在于它能够保留输入数据的历史信息,并利用这些信息来预测后续的输出,这使得它在自然语言处理、时间序列预测等领域中拥有广泛的应用…

新审视零阶优化在内存高效大模型微调中的应用

人工智能咨询培训老师叶梓 转载标明出处 随着大模型模型规模的增大&#xff0c;反向传播&#xff08;BP&#xff09;所需的内存开销也日益增加&#xff0c;这对内存效率提出了挑战。尤其是在设备上训练等内存效率至关重要的应用场景中&#xff0c;解决这一问题变得尤为迫切。 …

Sora 代码规范之Refactor this method to not always return the same value.(目的性问题)

Sora描述 Refactor this method to not always return the same value.&#xff08;目的性问题&#xff09; 上述代码&#xff0c;可能出现 总是返回 null 的情况 解决一下 原因&#xff1a;为什么要这么写呢&#xff1f;因为 下面的代码会对 materialInfos 这个集合处理&#…

房子公摊要消失了?

文&#xff5c;琥珀食酒社 作者 | 璇子 你敢信 才短短三个月 江苏、浙江、广东 这三房价高昂的城市 陆续宣布房市重大改革信号 比如将空中花园绿化阳台、 小区景观绿化亭廊 、 开放式风雨连廊等不计容积率 挑高客厅只算单层面积 甚至部分区域买房面积 直接按照套内面…

足球联赛|基于SprinBoot+vue的足球联赛管理系统(源码+数据库+文档)

足球联赛管理系统 目录 基于SprinBootvue的足球联赛管理系统 一、前言 二、系统设计 三、系统功能设计 5.1 系统前台功能实现 5.2 后台功能模块实现 5.2.1 管理员模块实现 5.2.2 用户后台模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选…

20+岁老牌定制家居品牌,如何靠呼叫中心捕获年轻消费者?

Home Tour类一镜到底的短视频&#xff0c;在社交平台一直备受年轻人喜爱。金牌厨柜这个20多岁的老牌定制家居品牌&#xff0c;不仅在高端厨柜和定制家居领域有着深厚的积累&#xff0c;而且一直也在探索数字化转型的新路径&#xff1a;用全新的数字化体系&#xff0c;迎合年轻一…

使用VScode的Git版本控制功能(图文版)

☁️ 前言 今天让我来手把手教你简单入门VScode自带的Git版本控制。 &#x1f389; 初始化仓库 初始化仓库之后&#xff0c;仓库里的文件发生了任何改动都会有相应的提示&#xff0c;这对于我们开发和维护项目非常有帮助。 &#x1f389;提交更改 初始化仓库之后&#xff…

机器学习:K-means算法及代码实现

1、K-means算法原理 K-means算法是一种常用的聚类算法&#xff0c;其目的是将数据集划分为K个簇&#xff08;clusters&#xff09;&#xff0c;使得每个簇内部的数据点尽可能相似&#xff0c;而簇与簇之间的数据点尽可能不同。以下是K-means算法的基本原理和步骤&#xff1a; 初…