Python列表去重的5种高效方法 | 完整教程

这是文章《用Python从列表中删除重复项》的第1部分(共1部分)。

内容片段: 从Python List中删除重复项有很多方法。

  • 使用临时列表和循环
  • 使用set()内置方法
  • 使用字典键
  • 列表count()函数
  • 列表推导式

从列表中删除重复项

Python列表可以包含重复元素。让我们看一下不同方式中如何删除重复元素的示例。

使用临时列表

这是从列表中删除重复元素的蛮力方式。我们将创建一个临时列表,只有在元素不存在时才将其添加。

ints_list = [1, 2, 3, 4, 3, 2]

temp = []

for x in ints_list:
    if x not in temp:
        temp.append(x)

ints_list = temp

print(f'Updated List after removing duplicates = {temp}')

输出:去除重复项后的更新列表为[1, 2, 3, 4] 推荐阅读:Python的f-strings。

2. set() 函数

在Python中,set没有重复元素。我们可以使用内置的set()函数将列表转换为set,然后使用list()函数将其转换回列表。

ints_list = [1, 2, 3, 4, 3, 2]

ints_list1 = list(set(ints_list))
print(ints_list1)  # [1, 2, 3, 4]

3. 将列表元素作为字典的键

我们知道字典键是唯一的。字典类有一个fromkeys()函数,它接受一个可迭代对象,用该可迭代对象的键创建字典。

ints_list = [1, 2, 3, 4, 3, 2]

ints_list2 = list(dict.fromkeys(ints_list))
print(ints_list2)  # [1, 2, 3, 4]

4. 不推荐使用列表count()函数。

列表的count()方法返回值的出现次数。我们可以与remove()方法一起使用它来从列表中消除重复元素。

ints_list = [1, 2, 3, 4, 3, 2]

for x in ints_list:
    if ints_list.count(x) > 1:
        ints_list.remove(x)
print(ints_list)  # [1, 2, 3, 4]

请注意,不建议在从同一迭代器中删除元素时使用count()函数,因为这可能导致不希望的结果。例如:

values = [87, 94, 45, 94, 94, 41, 65, 94, 41, 99, 94, 94, 94]

for x in values:
    if values.count(x) > 1:
        values.remove(x)
print(values)  # [87, 45, 65, 41, 99, 94, 94] - 94仍然出现了两次

5. 列表推导式

我们可以使用列表推导式从可迭代对象中创建一个列表。这种技术与使用临时列表和for循环来删除重复元素的方法相同,但能减少代码的行数。

ints_list = [1, 2, 3, 4, 3, 2]
temp = []
[temp.append(x) for x in ints_list if x not in temp]
print(temp)  # [1, 2, 3, 4]

从列表中删除重复项的最佳方法是什么?

如果您不想要重复元素,您应该使用Set。但是,如果您必须从列表中删除重复值,那么我推荐使用dict.fromkeys()方法,因为它既不会创建另一个临时的集合对象,也不会像count()函数那样可能导致意外的结果。所以它既节省内存又可靠。

bannerAds