gpt4 book ai didi

python - 如何在保留顺序的同时从列表中删除重复项?

转载 作者:IT老高 更新时间:2023-10-28 11:59:44 27 4
gpt4 key购买 nike

如何在保留顺序的同时从列表中删除重复项?使用集合删除重复项会破坏原始顺序。有内置的或 Pythonic 的成语吗?

最佳答案

这里有一些选择:http://www.peterbe.com/plog/uniqifiers-benchmark

最快的:

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

如果您打算在同一个数据集上大量使用此函数,也许您最好使用有序集:http://code.activestate.com/recipes/528878/

O(1) 每个操作的插入、删除和成员检查。

(小补充说明:seen.add()总是返回None,所以上面的or是仅作为尝试设置更新的一种方式,而不是作为逻辑测试的组成部分。)

关于python - 如何在保留顺序的同时从列表中删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/480214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com