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

如何在 Python 中去除列表重复项并保留顺序

原文:如何在 Python 中去除列表重复项并保留顺序 | w3cschool笔记

(请勿标记为付费文章!!!!)

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

列表与集合的区别

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

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

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

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

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

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

原列表 = [5, 10, 15, 20, 3, 15, 25, 20, 30, 10, 100]
去重列表 = []
for 数字 in 原列表:if 数字 not in 去重列表:去重列表.append(数字)
print(去重列表)  # 输出 [5, 10, 15, 20, 3, 25, 30, 100]

方法二:使用列表推导式

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

原列表 = [5, 10, 15, 20, 3, 15, 25, 20, 30, 10, 100]
去重列表 = []
[去重列表.append(数字) for 数字 in 原列表 if 数字 not in 去重列表]
print(去重列表)  # 输出 [5, 10, 15, 20, 3, 25, 30, 100]

方法三:使用 OrderedDict.fromkeys()

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

原列表 = [5, 10, 15, 20, 3, 15, 25, 20, 30, 10, 100]
from collections import OrderedDict
去重列表 = list(OrderedDict.fromkeys(原列表))
print(去重列表)  # 输出 [5, 10, 15, 20, 3, 25, 30, 100]

方法四:使用 reduce() 函数

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

from functools import reduce
原列表 = [5, 10, 15, 20, 3, 15, 25, 20, 30, 10, 100]
初始值 = ([], set())  # 用于存储去重后的列表和已存在的元素集合def 去重函数(累积器, 元素):列表, 集合 = 累积器if 元素 not in 集合:列表.append(元素)集合.add(元素)return 列表, 集合去重列表 = reduce(去重函数, 原列表, 初始值)[0]
print(去重列表)  # 输出 [5, 10, 15, 20, 3, 25, 30, 100]
http://www.xdnf.cn/news/13292.html

相关文章:

  • BeckHoff <--> 基恩士(CV-X300)三维机械手视觉系统的通讯 控制
  • minio私有桶授权访问
  • Leetcode 3574. Maximize Subarray GCD Score
  • java 面向对象编程
  • Linux下制作Nginx绿色免安装包
  • 7.4.分块查找
  • vue3 字体颜色设置的多种方式
  • sysctl优先级顺序
  • 第3章 MySQL数据类型
  • (八)深度循环神经网络:长序列建模、注意力机制与多模态融合
  • CloudReadering
  • Prompt Tuning、P-Tuning、Prefix Tuning的区别
  • c语言中的hashmap
  • ArkUI-X跨平台Bridge最佳实践
  • 张彬彬《龙骨焚箱》开机 奇幻冒险题材引期待
  • 在微服务架构中,怎么搭建Maven私服
  • crackme007
  • mysql8.4备份与恢复实践
  • bilibili-mcp 使用示例
  • 7.6 Finetuning the LLM on instruction data
  • 论文分享 _ Ladder:一种基于收敛的结构化图区块链_2025-06-10
  • 实战案例-FPGA如何实现JESD204B可重复的延迟
  • 2005-2021年中国地下水位年鉴数据(EXCEL/PDF)包含:各省监测点、监测深度等
  • 【存储系统】
  • 理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
  • 全新AI驱动Workspace Security 套件发布!Fortinet 电子邮件安全产品矩阵升级
  • PHP 多种内置的验证规则和函数
  • 在Jenkins上配置邮箱通知
  • 2025-03-15-位运算
  • 第一部分 -- ①语法分析的概要