在保留顺序和删除最旧元素的同时,从Python列表中删除重复项的最有效方法

时间:2010-10-22 20:16:18

标签: python list

我在网站上看到了一堆解决方案来删除重复项,同时保留最旧的元素。我对相反感兴趣:在保留最新元素的同时删除重复项,例如:

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

这样的事情怎么样?

感谢。

1 个答案:

答案 0 :(得分: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] = []