在Python中从列表中删除重复的内容(多种方法)

364 阅读1分钟

让我们来看看在Python中从列表中去除重复的几个习惯性方法。

方法 #1 - 创建一个新的列表 (最简单)

这是最容易编码的算法,但是因为它需要创建一个新的列表,所以需要更多的内存,而且速度也有点慢。

def remove_duplicates(original):
  deduped = []
  for item in original:
    if item not in deduped:
      deduped.append(item)
  return deduped

我们在这里利用了Python的in关键字,只在最后的列表中加入每一个项目,如果它还没有出现的话。

方法 #2 - 用语法糖创建一个新的列表 (代码更少,更难理解)

def remove_duplicates(original):
  deduped = []
  [deduped.append(item) for item in original if item not in deduped]
  return deduped

从性能的角度看,这是完全相同的代码,但只用了一行。如果你喜欢打代码高尔夫,那么这可能是你的解决方案。

方法#3 - 使用内置的 "集合 "数据结构(快速,失去顺序)

A [set()](https://www.w3schools.com/python/python_sets.asp)是一个不包含任何重复值的值组。通过将一个列表转换为一个集合,然后再返回,你就可以删除所有的重复值。这里的主要缺点是你会失去你的排序。

def remove_duplicates(original):
  return list(set(original))

这种方法在大多数情况下会比前两种方法更快,因为每次传输都是用big-o符号术语O(n) 。一组两个O(n) 的操作比一个O(n^2) 的操作要快。作为奖励,它甚至使用更少的代码。

方法 #4 - 使用一个有序的字典(快速,保持秩序)

通过使用集合库的OrderedDict类型,我们可以保持列表的顺序,同时保持与set() 相同的大O。

from collections import OrderedDict

def remove_duplicates(original):
  return list(OrderedDict.fromkeys(original))