当前位置: 首页 > news >正文

在Python中去除列表重复项并保留顺序的四种方法

在 Python 编程中,列表(list)是一种常用的数据结构,但有时列表中会出现重复项,这可能会影响程序的执行效率或导致错误结果。本文将为你详细介绍如何去除列表中的重复项,并保留元素的原始顺序,让你轻松掌握这一实用技能,开启高效编程之旅。

列表与集合的区别

列表和集合(set)是 Python 中两种重要的数据结构。它们的主要区别在于:列表中的元素可以重复出现,而集合中的元素必须唯一。因此,如果我们把一个列表转换为集合,重复项就会被自动去除。不过,集合中的元素顺序是不固定的,这与列表中元素的原始顺序可能不同。例如:

1

2

3

原列表=[5,10,15,20,3,15,25,20,30,10,100]

集合=set(原列表)

print(list(集合))# 输出结果可能为 [3, 100, 5, 10, 15, 20, 25, 30]

可以看到,转换后的集合虽然去除了重复项,但元素顺序发生了变化。

去除重复项并保留顺序的方法

方法一:使用 for 循环追加唯一项到新列表

我们可以创建一个空列表,然后遍历原列表,将第一次出现的元素追加到新列表中。这种方法简单易懂,适合初学者。

1

2

3

4

5

6

原列表=[5,10,15,20,3,15,25,20,30,10,100]

去重列表=[]

for数字in原列表:

if数字notin去重列表:

去重列表.append(数字)

print(去重列表)# 输出 [5, 10, 15, 20, 3, 25, 30, 100]

方法二:使用列表推导式

列表推导式可以使代码更加简洁。但需要注意的是,这种方法在处理大量数据时,效率可能不如其他方法。

1

2

3

4

原列表=[5,10,15,20,3,15,25,20,30,10,100]

去重列表=[]

[去重列表.append(数字)for数字in原列表if数字notin去重列表]

print(去重列表)# 输出 [5, 10, 15, 20, 3, 25, 30, 100]

方法三:使用 OrderedDict.fromkeys()

在 Python 3.7 及以后版本中,普通字典已经支持插入顺序。但在早期版本中,可以使用collections模块中的OrderedDict类来保留元素顺序。fromkeys()方法可以基于列表元素创建一个有序字典,然后将其转换回列表。

1

2

3

4

原列表=[5,10,15,20,3,15,25,20,30,10,100]

fromcollectionsimportOrderedDict

去重列表=list(OrderedDict.fromkeys(原列表))

print(去重列表)# 输出 [5, 10, 15, 20, 3, 25, 30, 100]

复制讲解

方法四:使用 reduce() 函数

reduce()函数是functools模块中的一个高效工具。它允许我们通过一个累积器来处理列表元素,从而实现去除重复项并保留顺序的功能。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

fromfunctoolsimportreduce

原列表=[5,10,15,20,3,15,25,20,30,10,100]

初始值=([],set())# 用于存储去重后的列表和已存在的元素集合

def去重函数(累积器, 元素):

列表, 集合=累积器

if元素notin集合:

列表.append(元素)

集合.add(元素)

return列表, 集合

去重列表=reduce(去重函数, 原列表, 初始值)[0]

print(去重列表)# 输出 [5, 10, 15, 20, 3, 25, 30, 100]

到此这篇关于在Python中去除列表重复项并保留顺序的四种方法的文章就介绍到这了

http://www.jsqmd.com/news/751638/

相关文章:

  • 观测Taotoken平台API调用的延迟与稳定性体感分享
  • 如何通过 curl 命令快速测试 Taotoken 的 OpenAI 兼容接口
  • 别再让程序‘死’得不明不白:用C++的system_error库给你的错误信息‘加个Buff’
  • 大模型多领域训练:Nemotron-Cascade 2技术解析
  • 在 Ubuntu 服务器上使用 Python 快速接入 Taotoken 大模型 API
  • 网盘直链下载助手完全指南:告别限速的终极解决方案
  • 三步解锁视频适配魔法:downkyi让每个设备都看到最佳画质
  • 如何在 WSL-Ubuntu 上安装 CUDA ?
  • 高效管理CS2存储单元的智能开源工具:CASEMOVE深度解析
  • 如何用手机快速识别电阻值:Resistor Scanner开源项目详解
  • LLM2LLM:基于迭代式数据增强的大语言模型高效微调实战
  • 3个理由告诉你为什么d2s-editor是暗黑2玩家的必备工具
  • 企业如何利用 Taotoken 多模型聚合能力优化内部知识问答系统
  • 紧急预警:未启用[InlineArray(N)]特性的C# 13项目正悄悄泄漏栈内存!3分钟自查+热修复方案
  • 为HermesAgent工具配置Taotoken作为自定义模型供应方
  • 如何在Windows上完美使用PS4手柄:3步完成游戏控制器映射的终极指南
  • 立创EDA画PCB拿省奖?我分析了三届蓝桥杯真题,发现这些高频考点和易错点
  • 魔兽世界GSE宏编译器终极指南:三步实现智能连招自动化
  • 3分钟快速搞定Masa Mods完整中文汉化:终极免费指南
  • 如何快速掌握BilibiliDown:从新手到高手的完整指南
  • 对比不同模型在Taotoken平台上的调用成本与效果平衡
  • freeDictionaryAPI:构建全球多语言词典服务的完整技术指南
  • 告别纸上谈兵:从3GPP Release 17看5G如何真正走进工厂、卫星和可穿戴设备
  • 2026年5月阿里云快速攻略:OpenClaw搭建及大模型API Key、Skill集成指南
  • 独立开发者如何借助 Taotoken 模型广场低成本试验多种大模型
  • 紧急!C# 13默认允许unsafe已成历史:2024 Q3起所有Azure App Service强制启用/unsafe:deny——你还在用旧csproj模板吗?
  • 从智能手环到车载中控:实战解析BLE蓝牙‘服务’与‘特征’在不同IoT场景下的配置差异
  • Docker化部署ElectrumX服务器:从原理到实战的完整指南
  • 安卓手机怎么隐藏应用不被发现?试试这个方法
  • 钉钉Stream机器人实战:手把手教你用Python SDK写一个‘计算器’机器人(附完整代码)