一尘不染

算法-如何有效删除列表中的重复元素?

algorithm

有一个 列表L每个 元素都包含 任意类型的 元素。如何有效删除此类列表中的所有重复元素? 必须保留订单

仅需要一个算法,因此不允许导入任何外部库。


阅读 264

收藏
2020-07-28

共1个答案

一尘不染

假设订单很重要:

  • 创建一个空集S和一个空列表M。
  • 一次扫描列表L一个元素。
  • 如果元素在集合S中,请跳过它。
  • 否则,将其添加到M和S。
  • 对L中的所有元素重复上述步骤。
  • 返回M。

在Python中:

>>> L = [2, 1, 4, 3, 5, 1, 2, 1, 1, 6, 5]
>>> S = set()
>>> M = []
>>> for e in L:
...     if e in S:
...         continue
...     S.add(e)
...     M.append(e)
... 
>>> M
[2, 1, 4, 3, 5, 6]

如果顺序无关紧要:

M = list(set(L))
2020-07-28