我在网站上看到了很多关于保留最老元素的去重解决方案。但我对相反的情况感兴趣:删除重复项时保留最新元素,例如:
list = ['1234','2345','3456','1234']
list.append('1234')
>>> ['1234','2345','3456','1234','1234']
list = unique(list)
>>> ['2345','3456','1234']
这样的东西是如何工作的?
谢谢。
需要对项目(或键)进行散列处理,可以在类似于列表的数据结构中就地操作:
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] = []
seen[x]
不会变成错误的吗?因为所有东西都已经移动了,所以你最终会弹出错误的项? - bstpierre
reversed()
反转列表,然后按照其他地方描述的方式进行操作,最后再次反转它。 - eumiro