从 Python 列表中删除重复项的 5 种方法
已发表: 2022-07-05在本教程中,您将学习如何从 Python 列表中删除重复项。
当您在 Python 中使用列表时,您有时可能需要仅使用列表中的唯一项——通过删除重复项。
有几种不同的方法可以做到这一点。 在本教程中,我们将介绍五种此类技术。
Python 列表基础
让我们通过回顾 Python 列表的基础知识开始我们的讨论。
Python 列表是可变的。 因此,您可以通过在列表中添加和删除元素来修改它们。 此外,Python 列表是元素的集合,不一定是唯一的。
那么如何只保留独特的元素并删除重复或重复的元素呢?
好吧,你可以通过几种不同的方式来做到这一点。 您可以创建一个仅包含原始列表中唯一元素的新列表。 或者您可以选择就地修改原始列表并删除重复的项目。
我们将在本教程中详细了解这些内容。
从 Python 列表中删除重复项的方法
让我们举一个现实世界的例子。 假设你在朋友的生日聚会上。
在显示的糖果集合中,您会看到一些重复的项目。 您现在想从糖果列表中删除那些重复的项目。

让我们创建一个包含上图中所有项目的sweets
列表。
sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]
在上面的sweets
列表中,项目“糖果”和“纸杯蛋糕”重复了两次。 让我们使用这个示例列表来删除重复的项目。
迭代 Python 列表以删除重复项
最直接的方法是创建一个新列表,其中每个项目只包含一次。
通读下面的代码单元:
unique_sweets = [] for sweet in sweets: if sweet not in unique_sweets: unique_sweets.append(sweet) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
- 我们初始化一个空列表
unique_sweets
。 - 在遍历
sweets list
时,我们访问每个sweet
。 - 如果
sweet
尚未出现在unique_sweets
列表中,我们使用.append()
方法将其添加到unique_sweets
列表的末尾。
假设您遇到一个重复的项目,例如, sweets
列表中第二次出现“糖果”。 这不会添加到unique_sweets
列表中,因为它已经存在:对于第二次出现“cupcake”和“candy” sweet not in unique_sweets
计算结果为False
。
因此,在这种方法中,每个项目在unique_sweets
列表中只出现一次——没有任何重复。
使用列表理解删除重复项
您还可以使用列表推导来填充unique_sweets
列表。
想要刷新列表理解的基础知识?
️ 查看 Python 中的列表推导教程。
让我们使用列表推导表达式: [output for item in iterable if condition is True]来简洁地重写上面的循环。
unique_sweets = [] [unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets] print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
即使您正在创建一个新列表,您也不会使用值填充创建的列表。 这是因为输出是unique_sweets
列表的.append()
操作。
要从 Python 列表中删除重复项,您还可以使用内置列表方法,我们将在下一节中介绍这一点。
使用内置列表方法删除重复项
您可以使用 Python 列表方法.count()
和.remove()
删除重复项。
– 使用语法list.count(value) ,.count
.count()
方法返回value
在list
出现的次数。 所以重复项对应的计数将大于 1。– list.remove(value)从列表中删除第一次出现的值。
使用上面的代码,我们有以下代码。
for sweet in sweets: # check if the count of sweet is > 1 (repeating item) if sweets.count(sweet) > 1: # if True, remove the first occurrence of sweet sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
由于.remove()
方法仅删除第一次出现的值,因此您不能使用它删除出现两次以上的项目。
- 如果特定项目重复(恰好出现两次),则此方法将删除第一次出现。
- 如果一个特定的项目重复了
K
次,那么在运行上面的代码之后,仍然会保留K-1
次重复。
但总的来说,当我们说重复时,我们通常指的是所有重复。

要处理这种情况,您可以修改上述循环以删除除一个之外的所有重复。 您可以运行一个while
循环来重复删除重复项,直到列表中每个项目的计数为 1,而不是使用if
条件来检查特定项目的计数。
sweets
列表现在包含 2 个重复的“cupcake”和 3 个重复的“candy”。
sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]
您可以使用while
循环来删除重复,如下所示。 只要 sweets 中的 sweet 计数大于 1,while 循环就会继续运行。当只剩下一次时,条件 sweets.count(sweet) > 1 变为 False,循环跳到下一项。
for sweet in sweets: # check if the count of sweet is > 1 (repeating item) while(sweets.count(sweet) > 1): # repeatedly remove the first occurrence of sweet until one occurrence remains. sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
但是使用嵌套循环可能不是很有效,因此如果您正在处理大型列表,您可以考虑使用讨论过的其他技术之一。
到目前为止,我们已经了解了以下内容:
- 从 Python 列表中删除重复项的方法——通过创建新列表——仅包含唯一项
- 内置列表方法
.count()
和.remove()
地修改列表
有一些 Python 内置数据结构要求值都是唯一的——不重复。 因此,我们可以将 Python 列表强制转换为这些数据结构之一以删除重复项。 然后将它们转换回列表。 我们将在接下来的部分中学习如何做到这一点。
将 Python 列表转换为一组以删除重复项
Python 集是所有唯一元素的集合。 因此,集合中存在的项目数(由len(<set-obj>
) 给出)等于存在的唯一元素数。
您可以使用以下语法将任何 Python 可迭代对象转换为集合:
set(iterable)
。
现在,让我们将列表 sweets 转换为一个集合并检查输出。
set(sweets) # Output {'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}
从上述代码单元格的输出中,我们看到每个项目只出现一次,并且重复项已被删除。
另外,请注意,项目的顺序不一定与它们在原始列表糖果中的顺序相同。 这是因为,除了作为唯一元素的集合之外,Python 集合对象还是一个无序集合。
现在我们已经通过将列表转换为集合来删除重复项,我们可以再次将其转换为列表,如下所示。
unique_sweets = list(set(sweets)) print(unique_sweets) # Output ['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']
使用列表项作为字典键来删除重复项
Python 字典是键值对的集合,其中键唯一地标识值。
您可以使用.fromkeys()
方法创建 Python 字典,语法如下: dict.fromkeys(keys, values)
。 这里, keys
和values
是分别包含字典的键和值的可迭代对象。
-
keys
是必需参数,它可以是任何与字典键对应的 Python 可迭代对象。 -
values
是一个可选参数。 如果您不指定可迭代的值,则使用默认值None
。
在不指定值的情况下, dict.fromkeys(sweets)
返回一个 Python 字典,其中值设置为None
- 默认值。 下面的代码单元解释了这一点。
dict.fromkeys(sweets) # Output {'cake': None, 'candy': None, 'cheesecake': None, 'cupcake': None, 'lollipop': None}
和上一节一样,我们可以再次将字典转换为列表,如下所示。
unique_sweets = list(dict.fromkeys(sweets)) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
从上面的输出中,我们可以看到重复项已从列表sweets
中删除。
加起来
以下是可用于从 Python 列表中删除重复项或重复项的不同方法的概述。
- 使用 Python 列表方法.append()将非重复项添加到新列表中。 新列表仅包含原始列表中的每个项目一次,并删除所有重复项。 您也可以使用列表推导来做到这一点。
- 使用内置的.count()和.remove()方法删除恰好出现两次的项目。 可以将其放置在while循环中以删除所有其他事件。
- 将 Python 列表转换为集合以仅保留唯一元素。
- 使用dict.fromkeys(list)从列表中删除任何重复项,因为字典不应该有重复键。
接下来,查看 Python 项目以进行练习和学习。 或者学习如何在 Python 列表中查找项目的索引。 快乐学习!