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.addseen_add而不是仅打电话给seen.add?Python是一种动态语言,与解决seen.add局部变量相比,解决每次迭代的成本更高。seen.add可能在两次迭代之间发生了变化,并且运行时不够智能,无法排除这种情况。为了安全起见,它必须每次检查对象。

以上是 python-如何在保留订单的同时从列表中删除重复项? 的全部内容, 来源链接: utcz.com/qa/408073.html

回到顶部