五百英里 發表於 2026-1-8 09:49:28

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

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">引言</a></li><li><a href="#_label1">列表与集合的区别</a></li><li><a href="#_label2">去除重复项并保留顺序的方法</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_0">方法一:使用 for 循环追加唯一项到新列表</a></li><li><a href="#_lab2_2_1">方法二:使用列表推导式</a></li><li><a href="#_lab2_2_2">方法三:使用 OrderedDict.fromkeys()</a></li><li><a href="#_lab2_2_3">方法四:使用 reduce() 函数</a></li></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>引言</h2>
<p>在&nbsp;Python&nbsp;编程中,列表(list)是一种常用的数据结构,但有时列表中会出现重复项,这可能会影响程序的执行效率或导致错误结果。本文将为你详细介绍如何去除列表中的重复项,并保留元素的原始顺序,让你轻松掌握这一实用技能,开启高效编程之旅。</p>
<p class="maodian"><a name="_label1"></a></p><h2>列表与集合的区别</h2>
<p>列表和集合(set)是 Python 中两种重要的数据结构。它们的主要区别在于:列表中的元素可以重复出现,而集合中的元素必须唯一。因此,如果我们把一个列表转换为集合,重复项就会被自动去除。不过,集合中的元素顺序是不固定的,这与列表中元素的原始顺序可能不同。例如:</p>
<div class="jb51code"><pre class="brush:py;">原列表 =
集合 = set(原列表)
print(list(集合))# 输出结果可能为 </pre></div>
<p>可以看到,转换后的集合虽然去除了重复项,但元素顺序发生了变化。</p>
<p class="maodian"><a name="_label2"></a></p><h2>去除重复项并保留顺序的方法</h2>
<p class="maodian"><a name="_lab2_2_0"></a></p><h3>方法一:使用 for 循环追加唯一项到新列表</h3>
<p>我们可以创建一个空列表,然后遍历原列表,将第一次出现的元素追加到新列表中。这种方法简单易懂,适合初学者。</p>
<div class="jb51code"><pre class="brush:py;">原列表 =
去重列表 = []
for 数字 in 原列表:
    if 数字 not in 去重列表:
      去重列表.append(数字)
print(去重列表)# 输出 </pre></div>
<p class="maodian"><a name="_lab2_2_1"></a></p><h3>方法二:使用列表推导式</h3>
<p>列表推导式可以使代码更加简洁。但需要注意的是,这种方法在处理大量数据时,效率可能不如其他方法。</p>
<div class="jb51code"><pre class="brush:py;">原列表 =
去重列表 = []
[去重列表.append(数字) for 数字 in 原列表 if 数字 not in 去重列表]
print(去重列表)# 输出 </pre></div>
<p class="maodian"><a name="_lab2_2_2"></a></p><h3>方法三:使用 OrderedDict.fromkeys()</h3>
<p>在 Python 3.7 及以后版本中,普通字典已经支持插入顺序。但在早期版本中,可以使用&nbsp;<code>collections</code>&nbsp;模块中的&nbsp;<code>OrderedDict</code>&nbsp;类来保留元素顺序。<code>fromkeys()</code>&nbsp;方法可以基于列表元素创建一个有序字典,然后将其转换回列表。</p>
<div class="jb51code"><pre class="brush:py;">原列表 =
from collections import OrderedDict
去重列表 = list(OrderedDict.fromkeys(原列表))
print(去重列表)# 输出 </pre></div>
<p class="maodian"><a name="_lab2_2_3"></a></p><h3>方法四:使用 reduce() 函数</h3>
<p><code>reduce()</code>&nbsp;函数是&nbsp;<code>functools</code>&nbsp;模块中的一个高效工具。它允许我们通过一个累积器来处理列表元素,从而实现去除重复项并保留顺序的功能。</p>
<div class="jb51code"><pre class="brush:py;">from functools import reduce
原列表 =
初始值 = ([], set())# 用于存储去重后的列表和已存在的元素集合


def 去重函数(累积器, 元素):
    列表, 集合 = 累积器
    if 元素 not in 集合:
      列表.append(元素)
      集合.add(元素)
    return 列表, 集合


去重列表 = reduce(去重函数, 原列表, 初始值)
print(去重列表)# 输出 </pre></div>
頁: [1]
查看完整版本: 在Python中去除列表重复项并保留顺序的四种方法