[推广] [一个“去重”写了 20 种方法?盘点 Python 列表去重的奇技淫巧]
·
想起茴香的茴子有四种写法,孔乙己先生是高明的,他如果生在这个时代,就能用不同的思路让 AI 帮他解决问题了。 Python 列表去重的 20 种实现方式 列表(数组)去重是最常见的算法,非常简单,但不同实现方式背后的差异巨大。AI 时代,可以不手写代码了,但需要知道代码背后的原理,这样才能更好地指导 AI 编程。 最简单的思路 新建列表,遍历原列表,当原列表的元素不在新列表的,则添加到新列表中。 def unique(data): # 新建 list new_list = [] for item in data: # 原 list 中的项是否存在于新 list 中,不存在则添加。这是 O(n)操作 if item not in new_list: new_list.append(item) return new_list 这种写法最直观易懂,但每次 not in 都要遍历整个 new_list,复杂度为 O(n²)。 如何降低复杂度呢?可以从以下角度思考: 哈希集合 / 字典:把查询从 O(n) 可压到 O(1),整体 O(n) 先排序:相同元素两两比较再去重,O(nlogn),但会破坏原顺序