python-如何在保留订单的同时从列表中删除重复项?
是否有内置的程序在保留顺序的同时从Python列表中删除重复项?我知道我可以使用集合来删除重复项,但这会破坏原始顺序。我也知道我可以这样滚动自己:
def uniq(input): output = []
for x in input:
if x not in output:
output.append(x)
return output
但是如果可能的话,我想利用一个内置的或者更Python化的习惯用法。
回答:
最快的:
def f7(seq): seen = set()
seen_add = seen.add
return [x for x in seq if not (x in seen or seen_add(x))]
为什么要分配seen.add
给seen_add
而不是仅打电话给seen.add
?Python是一种动态语言,与解决seen.add
局部变量相比,解决每次迭代的成本更高。seen.add
可能在两次迭代之间发生了变化,并且运行时不够智能,无法排除这种情况。为了安全起见,它必须每次检查对象。
以上是 python-如何在保留订单的同时从列表中删除重复项? 的全部内容, 来源链接: utcz.com/qa/408073.html