Python中如何在保留元素顺序的同时去除列表重复项?
Python列表去重并保留原始顺序
你提到用set()去重会打乱元素顺序,这里有几个简单高效的实现方案:
方案1:使用Python 3.7+的dict.fromkeys()(推荐)
Python 3.7及以上版本中,字典会严格保留插入顺序,利用这个特性可以一行代码完成去重:
my_list = [1, 3, 2, 3, 1, 5, 2] unique_list = list(dict.fromkeys(my_list)) print(unique_list) # 输出: [1, 3, 2, 5]
该方法时间复杂度为O(n),执行效率高,写法简洁。
方案2:手动遍历+集合记录已出现元素
如果需要兼容Python 3.7以下版本,可采用这种方式,同样能保证顺序且高效:
my_list = [1, 3, 2, 3, 1, 5, 2] seen = set() unique_list = [] for item in my_list: if item not in seen: seen.add(item) unique_list.append(item) print(unique_list) # 输出: [1, 3, 2, 5]
集合的in操作是O(1)复杂度,整体时间复杂度仍为O(n),性能表现优异。
为什么set()不适用?
set()本身是无序结构(Python 3.7之前完全无序,之后虽有插入顺序但不保证遍历顺序与原列表一致),转换为列表后必然打乱原始元素顺序,因此不适合需要保留顺序的去重场景。
内容的提问来源于stack exchange,提问作者sahzia muno
相关产品推荐
相关产品推荐

