在保留顺序和移除最旧元素的情况下,最有效的去除Python列表重复项的方法

5 投票
1 回答
779 浏览
提问于 2025-04-16 05:56

我在这个网站上看到很多方法可以去掉重复的元素,同时保留最旧的那个元素。不过我想要的是相反的效果:去掉重复的元素,但保留最新的那个元素。例如:

list = ['1234','2345','3456','1234']
list.append('1234')
>>> ['1234','2345','3456','1234','1234']
list = unique(list)
>>> ['2345','3456','1234']

像这样的操作应该怎么做呢?

谢谢。

1 个回答

3

这个功能需要你用的项目(或者说是键)必须是可以被哈希的,也就是说它们需要是可以唯一标识的东西。这个操作是在列表类的对象上直接进行的,也就是说它会直接修改原来的列表,而不是创建一个新的。

def inplace_unique_latest(L, key=None):
  if key is None:
    def key(x):
      return x
  seen = set()
  n = iter(xrange(len(L) - 1, -2, -1))
  for x in xrange(len(L) - 1, -1, -1):
    item = L[x]
    k = key(item)
    if k not in seen:
      seen.add(k)
      L[next(n)] = item
  L[:next(n) + 1] = []

撰写回答