千家信息网

python中怎么对列表元素去重并保持原有顺序

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章给大家介绍python中怎么对列表元素去重并保持原有顺序,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。这个需求涉及到集合,上代码前先讲讲集合。讲集合前我们先回顾一下可变数
千家信息网最后更新 2025年02月04日python中怎么对列表元素去重并保持原有顺序

这篇文章给大家介绍python中怎么对列表元素去重并保持原有顺序,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

这个需求涉及到集合,上代码前先讲讲集合。讲集合前我们先回顾一下可变数据类型和不可变数据类型。

  • 不可变数据类型:数字number(含int、float、bool、complex)、字符串string、元组tuple。

  • 可变数据类型:列表list、字典dict、集合set。

集合的存取是基于hash算法映射,只有不可变数据类型才能做hash算法,所以集合中只能存放不可变数据类型。集合的特性是去重、无序。学集合时最先接触的是交并差,每一本教python的书讲到集合都不会漏讲交并差,这里就不赘述了。

那么现在,我们需要将一个列表中的元素去重并保持原有顺序。最优解是什么?

还是直接上代码看案例吧:

raw_address = ['北京市', '北京市', '昌平区', '人民大街', '9999号']  # 客户自行录入的原始地址信息# 数据库中的地址信息是'北京市昌平区人民大街9999号',如何将客户录入的地址信息与数据库中的地址信息进行匹配?address = list(set(raw_address))  # 对原始地址list先转成集合再转成列表,自动完成去重print(address)  # 输出的是['人民大街', '昌平区', '9999号', '北京市']address.sort(key=raw_address.index)  # 再对去重后的列表按原始顺序排列print(address)  # 输出的是['北京市', '昌平区', '人民大街', '9999号']

可以看到用python对列表中的元素去重并保持原始的顺序只要2行代码即可完成,运行速度也相当高。

这背后是什么原理呢?

这是因为在python中变量实质是一种引用,上述案例中raw_address列表有5条字符串,分别存储在内存不同的地址。rad_address列表中保存了5条字符串的内存地址,在去重的时候不需要对列表中的字符串两两匹配是否有重复(这种运算相当耗时),只要检测是否存在相同的内存地址引用,去掉重复的引用只保留一条即可迅速去重。在还原顺序的时候只要根据原列表的元素索引排序即可。

关于python中怎么对列表元素去重并保持原有顺序就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

地址 数据 顺序 类型 可变 元素 北京 北京市 原始 人民 信息 大街 字符 字符串 昌平 昌平区 内存 代码 内容 客户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全宣传报道稿 电大网络安全技术考试 以太网络安全漏洞 晨月网络技术有限公司 服务器电源关闭后多长时间能开启 服务器和普通电脑区别 信息网络安全罩是什么 技术软件开发介绍 山东等离子套料软件开发商 政府 网络安全 证书 二手苹果8无法接通激活服务器 河南信来互联网科技公司 获嘉县网络安全宣传周 数据库遇到的问题及解决办法英文 qq群关系数据库 下载 java爬取网页数据库 税务网络安全检查工作方案 动态链接数据库病毒 中国软件开发工程师年薪 华中世纪互联网科技公司 人大金仓数据库是什么类型 二级分销系统软件开发公司 边缘网关和服务器的区别 软件开发在生活中的例子 sql数据库字段加前缀 学写倡议书六年级范文网络安全 服务器管理盘安装视频 分布式数据库扩展性测试 网络技术服务合同审查要点 什么是kms服务器地址
0