5 种从 Python 列表中移除重复项的方法 方法一:使用 set() 函数 使用 set() 函数是最简单的方法之一。set() 函数可以将列表中的元素转化为集合,自动去除重复项,然后再将集合转化为列表。 示例代码: “`python my_list = [1, 2, 3, 4, 2, 3, 1] unique_list = list(set(my_list)) print(unique_list) “` 方法二:使用列表推导式 列表推导式是一种简洁的方法,可以根据指定的条件生成一个新的列表。 示例代码: “`python my_list = [1, 2, 3, 4, 2, 3, 1] unique_list = [x for i, x in enumerate(my_list) if x not in my_list[:i]] print(unique_list) “` 方法三:使用 OrderedDict 类 OrderedDict 是 collections 模块中的一个类,它可以按照元素的插入顺序来保留列表中的元素,并且去除重复项。 示例代码: “`python from collections import OrderedDict my_list = [1, 2, 3, 4, 2, 3, 1] unique_list = list(OrderedDict.fromkeys(my_list)) print(unique_list) “` 方法四:使用列表中的 index() 方法 index() 方法可以返回指定元素在列表中的索引值,通过遍历列表并使用 index() 方法来判断元素是否已经存在于列表中,从而实现去除重复项的目的。 示例代码: “`python my_list = [1, 2, 3, 4, 2, 3, 1] unique_list = [] for x in my_list: if x not in unique_list: unique_list.append(x) print(unique_list) “` 方法五:使用 filter() 函数和 lambda 表达式 filter() 函数可以根据指定的条件过滤列表中的元素,结合 lambda 表达式可以很方便地去除重复项。 示例代码: “`python my_list = [1, 2, 3, 4, 2, 3, 1] unique_list = list(filter(lambda x: x not in unique_list, my_list)) print(unique_list) “`
在本教程中,您将学习如何从Python列表中删除重复项。
当您在Python中使用列表时,有时需要只使用列表中的唯一项 – 通过删除重复项。
有几种不同的方法可以做到这一点。在本教程中,我们将介绍五种这样的技术。
Python列表的基础知识
让我们从回顾一下Python lists的基础知识开始我们的讨论。
Python列表是mutable的。因此,您可以通过向列表中添加和删除元素来在原地修改它们。此外,Python列表是元素的集合,不一定是唯一的。
那么如何只保留唯一元素并删除副本或重复元素呢?
嗯,您可以通过几种不同的方式来实现这一点。您可以创建一个新列表,其中包含原始列表中的唯一元素。或者您可以选择就地修改原始列表并删除重复项。
我们将在本教程中详细学习这些内容。
从Python列表中删除重复项的方法
让我们以一个现实世界的例子开始。假设你在朋友的生日聚会上。
在展示的糖果集合中,您会发现一些重复的项目。现在,您想从糖果清单中删除这些重复项。
让我们创建一个包含上图中所有项目的sweets
列表。
sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]
在上面的sweets
列表中,项‘candy’和‘cupcake’重复了两次。让我们使用这个示例列表来删除重复项。
遍历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列表
时,我们访问每个。 - 如果在
unique_sweets
列表中不存在,我们使用.append()
方法将其添加到unique_sweets
列表的末尾。
假设您遇到一个重复的项,例如,sweets
列表中的第二次出现的‘candy’。由于它已经存在,这不会被添加到unique_sweets
列表中:sweet not in unique_sweets
对于‘cupcake’和‘candy’的第二次出现的评估结果为False
。
因此,在此方法中,每个项在unique_sweets
列表中仅出现一次-没有重复。
使用列表推导式删除重复项
您还可以使用列表推导式来填充unique_sweets
列表。
想要了解列表推导式的基础知识吗?
▶️请查看关于list comprehension in 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']
即使您正在创建一个新列表,但您不会填充已创建的列表。这是因为输出是.append()
操作为unique_sweets
列表。
要从Python列表中删除重复项,还可以使用内置的列表方法,在下一节中我们将介绍此方法。
使用内置的列表方法来删除重复项
您可以使用count()和remove()方法来删除重复项。
– 使用语法list.count(value),count()方法返回value在list中出现的次数。因此,重复项的计数将大于1。
– remove()方法从列表中删除value的第一个出现。
使用以上方法,我们有以下代码。
for sweet in sweets:
# 检查sweet的计数是否>1(重复项)
if sweets.count(sweet) > 1:
# 如果为True,则删除sweet的第一个出现
sweets.remove(sweet)
print(sweets)
# 输出
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
由于remove()方法只能删除值的第一次出现,因此无法用它来删除出现超过两次的项。
- 如果一个特定的项重复(恰好出现两次),该方法将删除第一次出现的项。
- 如果一个特定的项重复K次,则运行以上代码后,仍会保留K-1次重复。
但是一般来说,当我们说重复项时,我们通常指的是所有重复项。
为了处理这种情况,可以修改上述循环以删除除一个之外的所有重复项。不使用if条件来检查特定项的计数,而是使用while循环,重复删除重复项,直到列表中每个项的计数为1。
列表sweets现在包含2个“cupcake”的重复项和3个“candy”的重复项。
sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]
可以使用while循环来删除重复项,如下所示。while循环在sweets中sweet的计数大于1时持续运行。当只剩下一个出现时,条件sweets.count(sweet) > 1变为False,循环跳到下一个项。
for sweet in sweets:
# 检查sweet的计数是否>1(重复项)
while(sweets.count(sweet) > 1):
# 反复删除sweet的第一个出现,直到只剩下一个出现。
sweets.remove(sweet)
print(sweets)
# 输出
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
但是使用嵌套循环可能不是很高效,因此如果您处理大型列表,可以考虑使用其他讨论过的技术之一。
到目前为止,我们已经学到了以下知识:
- 通过创建仅包含唯一项的新列表来删除Python列表中的重复项
- 使用内置的列表方法count()和remove()来就地修改列表
有一些Python内置的数据结构要求值是全唯一的,没有重复。因此,我们可以将一个列表转化为其中一个数据结构的集合来删除重复项。然后再将其转换回列表。我们将在接下来的部分学习如何做到这一点。
将Python列表转换为集合以删除重复项
Python集合是包含所有唯一元素的集合。因此,集合中存在的项数(由len(set-obj)给出)等于唯一元素的数量。
您可以使用语法set(iterable)将任何Python可迭代对象转换为集合。
现在,让我们将列表sweets转换为集合并检查输出。
将英文翻译成简体中文,保留,及HTML标签。
set(sweets)
# 输出
{'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}
从上面的代码单元格的输出中,我们可以看到每个项都只出现了一次,并且重复项已被删除。
此外,请注意,项目的顺序不一定与它们在原始列表sweets中的顺序相同。这是因为除了是唯一元素的集合外,Python set对象还是一个无序集合。
既然我们通过将列表转换为集合来删除了重复项,现在可以再次将其转换为列表,如下所示。
unique_sweets = list(set(sweets))
print(unique_sweets)
# 输出
['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']
使用列表项作为字典键来删除重复项
Python dictionary是一个键值对的集合,其中键唯一地标识值。
您可以使用.fromkeys()
方法创建一个Python字典,语法为dict.fromkeys(keys, values)
。这里,keys
和values
是包含字典的键和值的可迭代对象。
keys
是一个必需的参数,它可以是任何对应于字典键的Python可迭代对象。values
是一个可选的参数。如果您不指定值的可迭代对象,则使用默认值None
。
在没有指定值的情况下,dict.fromkeys(sweets)
返回一个Python字典,其中值被设置为默认值None
。下面的代码单元格解释了这一点。
dict.fromkeys(sweets)
# 输出
{'cake': None,
'candy': None,
'cheesecake': None,
'cupcake': None,
'lollipop': None}
与前一节一样,我们可以将字典再次转换为列表,如下所示。
unique_sweets = list(dict.fromkeys(sweets))
print(unique_sweets)
# 输出
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
从上面的输出中,我们可以看到已从列表sweets中删除了重复项。
总结👩🏫
以下是您可以使用的不同方法来从Python列表中删除重复项或重复项。
- 使用Python list method.append()将非重复项添加到新列表中。新列表中包含原始列表中的每个项,每个项仅出现一次,并删除所有重复项。您还可以使用列表推导来做到这一点。
- 使用内置的.count()和.remove()方法来删除恰好出现两次的项。可以将相同的内容放在while循环中以删除所有其他出现次数。
- 将Python列表转换为集合,以保留唯一元素。
- 使用dict.fromkeys(list)从列表中删除任何重复项,因为字典的键不应有重复。
接下来,查看Python projects进行练习和学习。或者学习如何find the index of an item in Python lists。祝您学习愉快!