Python每日一题指南|列表去重还要保持顺序

内容分享11小时前发布 Yahnn
0 0 0

❓ 如何对列表去重,同时保留元素第一次出现的顺序?

别急着写 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)
✅ 代码简洁、性能优秀、可读性强

Python每日一题指南|列表去重还要保持顺序

© 版权声明

相关文章

暂无评论

none
暂无评论...