Python
容器資料型態
list
没有重复的

Python 列表 删除重复: 解释和例子

在这篇文章中,我们将讨论与 Python list remove duplicates 相关的六个主题,下面将逐一讨论。

  • 定义删除列表中所有重复数据的函数
  • 在嵌套列表中
  • 如何在随机化列表时移除重复序列
  • 在移除重复数据时保持顺序
  • 删除重复数据并排序
  • 删除两个列表中的重复数据

每个主题都有简短的解释和示例。

1. 定义一个函数来删除列表中的所有重复数据

要删除 Python list 中的所有重复项,我们可以使用 set() 函数。 Python 的缺省数据类型,set,是一个特殊的数据类型,它不允许包含重复的项。

💡

如果您有兴趣了解更多,请查看 Lists vs Tuples vs Dictionaries vs Sets

set()函数将一个可迭代的对象,例如一个列表,转换为一个集合,并自动删除重复的对象。 你可以使用它来编写一个函数,删除列表中的所有重复数据,如下所示

让我们看看示例代码

def remove_duplicates(lst):
    return list(set(lst))
 
my_list = [1, 2, 3, 3, 4, 2, 1]
result = remove_duplicates(my_list)
 
print(result)
 
# Output
[1, 2, 3, 4]

上面的代码使用set()删除重复的数据,然后使用list()将它们转换回列表并返回。

在这种情况下需要注意的是,现有列表的顺序是不保证的。 因为 Python 集合是一种无序的数据类型,所以当转换回 list 时,有可能不保留原来的顺序。

如果你想在删除列表中的重复数据时保留顺序,请参见 第 4 节

2. 删除嵌套列表中的重复数据

在 Python 中移除嵌套 list 中的重复是有点不同的。 你不能使用 set() 来删除嵌套列表中的重复数据,所以你需要使用一个循环来删除重复数据。

下面是一个从嵌套列表中删除重复的函数的示例代码:

def remove_duplicates_nested(lst):
    result = []
    for sublist in lst:
        if sublist not in result:
            result.append(sublist)
    return result
 
my_list = [[1, 2, 3], [3, 4, 5], [1, 2, 3], [6, 7, 8]]
result = remove_duplicates_nested(my_list)
print(result)
 
# Output
[[1, 2, 3], [3, 4, 5], [6, 7, 8]]

上面的代码创建了一个空列表result,并遍历双列表lst,检查每个子列表是否已经存在于result中。 只有当它不存在于result中时,才会被添加到result中。

这将删除重复的子列表,并最终返回一个唯一的结果。

3. 如何在随机化列表时删除重复项

通过下面的步骤,你可以从Python列表中随机抽取项,同时删除重复项。

  1. 创建一个删除了重复项的新列表。
  2. 从新列表中随机提取项。

下面是一些实现这个功能的示例代码

import random
 
def get_random_elements(lst, num_elements):
    unique_elements = list(set(lst))
    random_elements = random.sample(unique_elements, num_elements)
    return random_elements
 
my_list = [1, 2, 3, 3, 4, 2, 1]
result = get_random_elements(my_list, 3)
print(result)
 
# Output
[1, 4, 2]

上面的代码使用set()删除重复内容,然后转换为list()创建新的列表unique_elements

然后我们使用random.sample()函数从unique_elements中随机抽取num_elements个元素生成random_elements。 然后返回 random_elements

💡

random.sample()函数从列表中随机抽取一定数量的非重复项。

4. 删除重复数据时保持顺序

使用set()函数的重复数据删除方法会忽略列表的现有顺序。 让我们看看如何避免这种情况,并在重复数据删除时保持顺序。

在 Python 中,你可以使用 collections 模块中的 OrderedDict 类和 list() 来删除列表中的重复数据,同时保留顺序。 下面是一个使用它们的代码示例

from collections import OrderedDict
 
def remove_duplicates(lst):
    return list(OrderedDict.fromkeys(lst))
 
my_list = [1, 2, 3, 3, 4, 2, 1]
result = remove_duplicates(my_list)
print(result)
 
# Output
[1, 2, 3, 4]

在上面的代码中,函数 OrderedDict.fromkeys()用于创建一个去除了重复项的有序字典,然后将其转换回列表。

OrderedDict是一个类似于字典的类,与字典类似,但保持了项的顺序。 因此,如果使用fromkeys()方法创建一个删除了重复项的字典,那么在删除重复项后,项的顺序将被保留。 然后我们使用list()函数将字典转换回列表。

5. 删除重复项并对列表排序

要在 Python 中对列表项进行重复删除和排序,可以执行以下操作

  1. 创建一个删除了重复项的新列表。
  2. 对新创建的列表排序。

下面是一些实现这个功能的示例代码。

def remove_duplicates_and_sort(lst):
    unique_elements = list(set(lst))
    sorted_elements = sorted(unique_elements)
    return sorted_elements
 
my_list = [3, 2, 1, 4, 3, 2, 1]
result = remove_duplicates_and_sort(my_list)
print(result)
 
# Output
[1, 2, 3, 4]

在上面的代码中,我们使用set()删除重复的元素,然后转换为list创建一个新的列表,unique_elements

然后我们使用sorted()函数创建一个sorted_elements,以升序排列unique_elements。 然后返回 sorted_elements

💡

sorted()函数返回一个按列表排序的新列表。 更多信息,请参见帖子 Sorting lists

6. 如何重复两个列表

如何删除两个列表中的重复内容,在帖子Join listsSection 4中有所介绍。

请阅读该部分。

结论

在这篇文章中,我试图回答你关于 Python list 删除重复的一些问题。

希望能对你的实际工作有所帮助。

copyright for Python 列表 删除重复: 解释和例子

© 2023 All rights reserved.