最快的:
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
可能在两次迭代之间发生了变化,并且运行时不够智能,无法排除这种情况。为了安全起见,它必须每次检查对象。