❓ 如何对列表去重,同时保留元素第一次出现的顺序?
别急着写 list(set(lst)) —— 它虽然快,但顺序全乱了!
今日题目
给定一个包含重复元素的列表,返回一个新列表,其中每个元素只出现一次,且顺序与原列表中首次出现的位置一致。
示例输入:
[70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
期望输出:
[70, 88, 91, 107, 234, 177, 282, 197]
❌ 错误示范:list(set(lst))
lst = [3, 1, 4, 1, 5, 9, 2, 6, 5]
print(list(set(lst)))
# 可能输出: [1, 2, 3, 4, 5, 6, 9] → 顺序完全打乱!
⚠️ 缘由:set 是无序集合(尽管 Python 3.7+ 字典有序,但 set 仍不保证插入顺序)
✅ 正确方案:dict.fromkeys()(推荐!一行搞定)
lst = [70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
unique_lst = list(dict.fromkeys(lst))
print(unique_lst)
# 输出: [70, 88, 91, 107, 234, 177, 282, 197]
原理解析:
- dict.fromkeys(lst) 会以 lst 中的元素为键创建字典
- Python 3.7+ 起,字典默认保持插入顺序
- 键天然唯一 → 自动去重
- 再用 list() 提取键 → 顺序保留!
✅ 时间复杂度:O(n)
✅ 空间复杂度:O(n)
✅ 代码简洁、性能优秀、可读性强

© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...





