请实现一个 Python 函数,用于删除列表中的重复元素,并确保去重后各元素原有的相对顺序保持不变,即保持第一次出现的顺序。
考察说明
考查对 Python 列表去重的基本操作以及保持元素顺序的编程能力。
回答思路
- 【回答框架 1】最直接的方法是遍历原列表,使用一个辅助集合记录已出现的元素,如果当前元素不在集合中,则添加到结果列表并加入集合,否则跳过。这样既去重又保持了第一次出现的顺序。
- 【回答框架 2】另一种方法是利用 Python 的 dict.fromkeys 或 OrderedDict,因为字典在 Python 3.7+ 中保持插入顺序,dict.fromkeys(list) 会去除重复并保留顺序,再转换为列表即可。
- 【回答框架 3】如果要求原地修改列表,可以反向遍历并借助集合标记,从后向前删除重复项,但要注意索引变化;或者使用列表推导式配合条件判断,但需要额外维护状态。
- 【回答框架 4】时间复杂度为 O(n),空间复杂度为 O(n),其中 n 是列表长度。对于不可哈希元素(如列表、字典),上述方法不适用,需改为比较元素相等性,时间复杂度为 O(n^2)。
- 【关键点 1】使用 set 记录已见元素,遍历时判断,保持首次出现顺序。
- 【关键点 2】dict.fromkeys 或 OrderedDict 可一行实现,依赖字典顺序。
- 【关键点 3】时间复杂度 O(n),空间复杂度 O(n)。
- 【关键点 4】对于不可哈希元素,需用列表或相等性比较,时间升为 O(n^2)。
- 【易错点 1】直接使用 set(list) 会丢失顺序,不符合要求。
- 【易错点 2】原地删除时若正向遍历会跳过元素,需注意索引处理。
- 【易错点 3】元素不可哈希时,不能使用 set 或 dict 键,需用其他方法。