Python 列表去重的4种方式及性能对比

【Bug已解决】npm install -g @anthropic-ai/claude-code 出现 EACCES: permission denied 解决方案 方案适用场景推荐指数nvm 管理 Node长期开发环境,一次配置永久生效⭐⭐⭐⭐⭐修改 npm 全局目录不想引入 nvm,快速解决⭐⭐⭐⭐修复现有目录权限之前用过 sudo 装包,需要修复⭐⭐⭐Windows 管理员/改目录Windows 平台专用⭐⭐⭐⭐官方原生安装脚本想彻底避开 npm 权限问题⭐⭐⭐⭐报的本质是npm 全局安装目录的属主权限与当前执行用户不匹配,而不是 npm 或 Claude Code 本身有问题。不要用sudo"强行"解决。 阅读详情

列表去重是Python中一种常见的处理方式,任何编程场景都可能会遇到需要列表去重的情况。

列表去重的方式有很多,本文将一一讲解他们,并进行性能的对比。

让我们先制造一些简单的数据,生成0到99的100万个随机数:

from random import randrange
DUPLICATES = [randrange(100) for _ in range(1000000)]


接下来尝试这4种去重方式中最简单直观的方法:

1.新建一个数组,遍历原数组,如果值不在新数组里便加入到新数组中。

# 第一种方式
def easy_way():
    unique = []
    for element in DUPLICATES:
        if element not in unique:
            unique.append(element)
    return unique


进入ipython使用timeit计算其去重耗时:

%timeit easy_way()
# 1.16 s ± 137 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

平均耗时在1.16秒左右,但是在这个例子中我们使用了数组作为存储对象,实际上如果我们改成集合存储去重后的结果,性能会快不少:

def easy_way():
    unique = set()
    for element in DUPLICATES:
        if element not in unique:
            unique.add(element)
    return unique
%timeit easy_way()
# 48.4 ms ± 11.6 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)


平均耗时在48毫秒左右,改善明显,这是因为集合和数组的内在数据结构完全不同,集合使用了哈希表,因此速度会比列表快许多,但缺点在于无序。

接下来看看第2种方式:

2.直接对数组进行集合转化,然后再转回数组:

# 第二种去重方式
def fast_way()
    return list(set(DUPLICATES))

耗时:

%timeit fast_way()
# 14.2 ms ± 1.73 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)


平均耗时14毫秒,这种去重方式是最快的,但正如前面所说,集合是无序的,将数组转为集合后再转为列表,就失去了原有列表的顺序。

如果现在有保留原数组顺序的需要,那么这个方式是不可取的,怎么办呢?

3.保留原有数组顺序的去重

使用dict.fromkeys()函数,可以保留原有数组的顺序并去重:

def save_order():
    return list(dict.fromkeys(DUPLICATES))


当然,它会比单纯用集合进行去重的方式耗时稍微久一点:

%timeit save_order()
# 39.5 ms ± 8.66 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)


平均耗时在39.5毫秒,我认为这是可以接受的耗时,毕竟保留了原数组的顺序。

但是,dict.fromkeys()仅在Python3.6及以上才支持。

如果你是Python3.6以下的版本,那么可能要考虑第四种方式了。

4. Python3.6以下的列表保留顺序去重

在Python3.6以下,其实也存在fromkeys函数,只不过它由collections提供:

from collections import OrderedDict
def save_order_below_py36():
    return list(OrderedDict.fromkeys(DUPLICATES))


耗时:

%timeit save_order_below_py36()
# 71.8 ms ± 16.9 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

平均耗时在72毫秒左右,比 Python3.6 的内置dict.fromkeys()慢一些,因为OrderedDict是用纯Python实现的。

我们的文章到此就结束啦,但是并没有完全结束哦。

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的程序媛姐姐

一定要备注【高清图】哦

????????????????????

➕我们的程序媛小姐姐微信要记得备注【高清图】哦

深度测评:Accio Work——目前普通用户最友好的多 Agent 协同工具 摘要:Accio Work是阿里国际站推出的多Agent协同工具,通过借鉴古代"三省六部制"构建高效协作框架。该工具支持主流大模型,可配置专业Agent角色,实现40分钟内完成复杂产品PRD等高效协作。其亮点在于直观的UI设计和流程驱动机制,能强制各Agent从专业视角深度思考。虽然超长对话稳定性有待优化,但作为目前最用户友好的多Agent工具,显著降低了构建复杂AI团队的门槛,成为提升个人和小微企业生产力的利器。 阅读详情

相关推荐

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7450

Python 对数组去重:

为了删除重复项,我们将给定的 NumPy 数组传递给 unique() 方法,它将返回唯一数组。lexsort() 是间接稳定排序,lexsort() 接受一个排序键数组,可以将其解释为 numpy 数组中的列,lexsort 返回一个整数索引数组,该数组描述了多列的排序顺序。给定一个一维数组,对于数组中的每个元素,我们将检查它是否在数组中重复,如果重复,我们将删除该元素,否则我们将保留它。给定一个二维数组,对于数组中的每个数组,我们将检查它是否在数组中重复,如果重复,我们将删除数组,否则我们将保留它。

weixin_72296707的博客 4007

从“破解”到应用:三菱数控系统M80协议逆向分析与工业数据采集网关搭建指南

本文深入解析三菱数控系统M80协议的逆向分析方法与工业数据采集网关搭建技术。通过TCP协议实现跨平台通信,详细介绍了M80协议的数据包结构、多语言实现方案(C#、Java、C/C++)以及Linux数据采集网关的架构设计与容器化部署。为工业自动化领域的开发者提供从协议分析到企业级数据采集落地的完整解决方案。

weixin_29228781的博客 1213

python OrderedDict函数详细介绍

做 leetcode146. LRU缓存机制使用到OrderedDict函数,但是往上搜的资料都是只有初始化那篇,因此更新本文。 1、定义 python中字典Dict是利用hash存储,因为各元素之间没有顺序。OrderedDict听名字就知道他是 按照有序插入顺序存储 的有序字典。除此之外还可根据key, val进行排序。 2、初始化 2.1 先初始化定义一个OrderedDict,然后按照键值对插入,此时dict可以记录插入字典的顺序 import collections d = ...

longshaonihaoa的博客 9万+

vue微前端qiankun框架学习到项目实战,基座登录动态菜单及权限控制

技术无关,独立开发,独立部署,增量升级,独立运行,微前端的核心目标是将巨石应用拆解成若干可以自治的松耦合微应用。

前端开发工程师 9751

海康DS-7604N-K1/RTB固件包

【摘要】海康DS-7604N-K1/RTB萤石云设备发布V4.30.091版本升级程序(2022.09.19),仅适用于指定型号。升级前需先升级至V3.4.106基础版本,刷机会重置设备为未激活状态,需重新设置admin密码。该机型支持密码/手势登录,无密码时可通过U盘升级。注意事项:升级存在风险,需确认程序适用性;升级过程严禁断电;必须阅读压缩包内的刷机说明。此为定制机型,非必要不建议升级。(150字)

海康威视技术支持 1578

python3 OrderedDict类(有序字典)

创建有序字典 import collections dic = collections.OrderedDict() dic['k1'] = 'v1' dic['k2'] = 'v2' dic['k3'] = 'v3' print(dic) #输出:OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]) clea...

weixin_30915951的博客 430

QT实现MQTT服务端(附完整源码)

QT实现MQTT服务端(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1253

python入门学习(七)----- 删除数组中的重复数据

1、利用for…in…循环 >>> temp = [] >>> number = [1,2,3,4,5,5,3,1] >>> for each in number: if each not in temp: temp.append(each) >>> >>> temp [1, 2, 3, 4, 5] 2、使用集合 >>> number = [1,2,3,4,5,5,3,1] >&g

d_eng_的博客 3843

WPF 上位机可视化天花板:HandyControl 搭建 SCADA 系统

HandyControl 凭借「丰富的工业级控件、灵活的主题定制、优异的性能」,成为 WPF 开发 SCADA 系统的首选 UI 库。本文搭建的 SCADA 系统涵盖实时监控、设备控制、报警管理、趋势分析四大核心功能,通过 HandyControl 实现了工业级可视化效果,开发效率提升 60% 以上。控件开箱即用:无需自定义仪表盘、趋势图、指示灯等 SCADA 核心控件;可视化效果专业:工业风主题、动态颜色切换、清晰的状态呈现,契合工业场景需求;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1126

基于Simulink的超级电容快速响应特性建模与仿真

本文介绍了基于Simulink的超级电容快速响应特性建模与仿真方法。主要内容包括:超级电容的工作原理、一阶RC等效电路模型及其动态电压方程;通过Simulink搭建超级电容模型的两种方法(Simscape Electrical推荐方案和基础模块透明教学方案);仿真100A×100ms放电脉冲下的电压响应特性,并与锂电池进行动态对比;分析超级电容在混合储能系统中的功率分配优势。文章还提供了工程实践要点和扩展方向,如电压均衡、温度影响评估以及与DC-DC变换器集成等。通过建模实践,验证了超级电容在毫秒级响应、高

xiaoheshang_123的博客 98

python fromkeys去重,Python 列表去重的4种方式及性能对比

列表去重是Python中一种常见的处理方式,任何编程场景都可能会遇到需要列表去重的情况。列表去重的方式有很多,本文将一一讲解他们,并进行性能的对比。让我们先制造一些简单的数据,生成0到99的100万个随机数:fromrandomimportrandrangeDUPLICATES=[randrange(100)for_inrange(1000000)]接下来尝试这4种去重方式中最简...

weixin_32352621的博客 358

uniapp - 实现扫码功能自定义扫描二维码/条码界面+手电筒轻触照亮+扫码屏幕添加手动输入框,手机扫描二维码并跳转过程,调用手机原生摄像头进行扫码且自动识别执行事件(uniApp安卓苹果App端)

uniapp,app端,安卓app,苹果ios,uniapp扫码识别,二维码展示和扫码,uniapp如何实现扫码功能,uni-app实现扫码功能,二维码和一维码/条码扫描,UniApp实现扫描二维码,uniapp开发原生app页面的扫码功能,自定义扫码界面,uniapp怎么调用扫一扫功能,app自定义扫码界面,uniapp 自定义扫一扫页面,扫码手电筒功能,自定义扫描框,扫码报错怎么办,扫码黑屏,扫一扫摄像头黑屏,uniapp扫码原生插件,最新扫码组件,连续扫码,uniapp APP扫码,扫码后如何处理跳转

✅ 精选推荐文章 1万+

python list去重函数_Python 列表去重的4种方式及性能对比

列表去重是Python中一种常见的处理方式,任何编程场景都可能会遇到需要列表去重的情况。列表去重的方式有很多,本文将一一讲解他们,并进行性能的对比。让我们先制造一些简单的数据,生成0到99的100万个随机数:fromrandomimportrandrangeDUPLICATES=[randrange(100)for_inrange(1000000)]接下来尝试这4种去重方式中最简单直观的方法:1....

weixin_39884872的博客 242

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python 列表去重的4种方式及性能对比。

转自:http://www.pinlue.com/article/2020/11/0814/2611335420741.html

Memory1011的博客 122

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

python数组重复数据去重_Python列表重复数据消除的四种方法及其性能比较,去,4,方式,对比...

列表去重是Python中一种常见的处理方式,任何编程场景都可能会遇到需要列表去重的情况。列表去重的方式有很多,本文将一一讲解他们,并进行性能的对比。让我们先制造一些简单的数据,生成0到99的100万个随机数:fromrandomimportrandrangeDUPLICATES=[randrange(100)for_inrange(1000000)]接下来尝试这4种去重方式中最简...

weixin_39637614的博客 1365

Python列表去重的方式有很多,了解它们,进行性能的对比

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于Python 实用宝典,作者Python 实用宝典 前言 列表去重是Python中一种常见的处理方式,任何编程场景都可能会遇到需要列表去重的情况。 列表去重的方式有很多,本文将一一讲解他们,并进行性能的对比。 让我们先制造一些简单的数据,生成0到99的100万个随机数: from random import randrange DUPLICA..

Python案例分享,B站视频教程:https://space.bilibili.com/523606542 346

python列表实现_Python列表去重如何实现?列表去重的4种方式

在开发中对列表去重是非常常见的需求,列表去重也是Python中一种常见的处理方式。列表作为Python中最常用的数据结构,承担了Python中大多数的数据存储任务,但Python本身是不满足互异性的,意思就是有可能重复,那就需要去除这些重复值。那么Python列表去重要怎么做呢?列表去重的方式有很多,下面介绍4种方式,并对其进行性能比较。让我们先制造一些简单的数据,生成0到99的100万个随机数:...

weixin_34763548的博客 931

Python中如何实现列表去重

在Python中,实现列表去重有多种方法,每种方法都有其适用场景和优缺点。选择哪种方法取决于你的具体需求,比如是否需要保留原始顺序、列表中元素的类型、以及对性能的要求等。对于大多数情况,使用集合或(Python 3.7+中直接使用字典)是最简单且高效的方法。然而,在处理复杂数据结构或需要额外逻辑判断时,使用循环和条件判断可能更为灵活。如果你的数据主要是数值型,并且已经在使用numpy库,那么利用numpy的unique函数可能是一个不错的选择。

Dingdangr的博客 1862

【python】3个Python列表高效去重技巧:从基础到进阶(附性能对比)

本文介绍了3种Python列表去重的高效方法及其适用场景:1)set()方法最快速但无序;2)dict.fromkeys()保留顺序但需Python 3.7+;3)pandas库适合大数据量及条件过滤。性能测试显示set()最快(0.003秒/10万条),pandas最慢(0.012秒)。文章还请求读者关注支持作者达成5000粉丝目标。不同方法各具优势,可根据顺序保留、数据量和复杂度需求选择最适合的方案。

weixin_56334307的博客 1408

python列表去重_python列表去重

广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!方法一:利用集合去重 # ! usrbinpython3# -*- coding:utf-8 -*-# @time:20191210 07:00# @微信公众号:itester软件测试小栈# @author:coco# @python交流群:604469740# @email:359...

weixin_39843215的博客 809

python中列表实现去重使用_Python列表去重的方式有很多,了解它们,进行性能的对比...

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理以下文章来源于Python 实用宝典,作者Python 实用宝典前言列表去重是Python中一种常见的处理方式,任何编程场景都可能会遇到需要列表去重的情况。列表去重的方式有很多,本文将一一讲解他们,并进行性能的对比。让我们先制造一些简单的数据,生成0到99的100万个随机数:from...

weixin_39539563的博客 82

python列表去重方法

原文链接:http://www.peterbe.com/plog/uniqifiers-benchmark Suppose you have a list in python that looks like this: ['a','b','a'] # or like this: [1,2,2,2,3,4,5,6,6,6,6] and you want to remove a

Room of Requirement 2231

Python列表去重的4种高效算法对比

在大数据时代,Python列表去重算法的选择对数据处理效率至关重要。本文对比分析了四种高效的去重算法:集合去重、字典去重、排序+比较运算符去重以及基于数据结构的去重算法。集合去重算法因其O(n)的时间复杂度和高效的空间利用率,在大数据处理中表现突出。字典去重算法适合小规模数据,而排序+比较运算符去重算法在处理大数据时能有效减少内存占用。基于数据结构的算法则提供了更高的灵活性和效率,尤其适用于大规模数据。选择去重算法时,需根据数据类型、规模及处理需求综合考虑,以优化数据处理流程。随着技术进步,新的算法和工具将

2501_90410679的博客 137

python去重列表中相同的字典元素

python去重列表元素问题

m0_45888058的博客 2380

【Python列表去重终极方案】:OrderedDict如何高效保留元素顺序?

解决Python列表去重难题,高效保留元素顺序。本文介绍使用OrderedDict实现列表去重的 OrderedDict 保留顺序方法,适用于需维持原序的场景,操作简单且兼容性好,性能优于传统方式,值得收藏。

PixelShoal的博客 638
上一篇: TensorFlow已死,TensorFlow万岁!
下一篇: 梯度下降算法的工作原理
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值