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)。这里,keysvalues是包含字典的键和值的可迭代对象。

  • 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。祝您学习愉快!

类似文章