第10题:去重
发布: (2026年1月20日 GMT+8 14:56)
2 min read
原文: Dev.to
Source: Dev.to
Problem Description
我们需要一个函数,在保持元素原始顺序的同时删除列表中的重复项。
示例
remove_duplicates([1, 2, 2, 3, 1, 4]) 应返回 [1, 2, 3, 4]。
Solution
def remove_duplicates(lst):
"""
Removes duplicates from a list while maintaining order.
"""
seen = set()
result = []
for i in lst:
if i not in seen:
seen.add(i)
result.append(i)
return result
# Test case
print(remove_duplicates([1, 2, 2, 3, 1, 4]))
# Output: [1, 2, 3, 4]
Explanation
-
初始化
seen = set()– 用于存储已经出现过的元素。result = []– 将保存去重后的最终列表。
-
遍历输入列表
for i in lst:- 如果
i不在seen中,则说明是第一次出现:- 将其加入
seen:seen.add(i)。 - 将其追加到
result:result.append(i)。
- 将其加入
- 如果
i已经在seen中,则跳过。
- 如果
-
返回
result列表,此时它包含了每个唯一元素,且顺序保持为首次出现的顺序。
示例走查 [1, 2, 2, 3, 1, 4]
| 步骤 | 元素 i | 操作 | seen | result |
|---|---|---|---|---|
| 1 | 1 | 不在 seen → 添加并追加 | {1} | [1] |
| 2 | 2 | 不在 seen → 添加并追加 | {1, 2} | [1, 2] |
| 3 | 2 | 已在 seen → 跳过 | {1, 2} | [1, 2] |
| 4 | 3 | 不在 seen → 添加并追加 | {1, 2, 3} | [1, 2, 3] |
| 5 | 1 | 已在 seen → 跳过 | {1, 2, 3} | [1, 2, 3] |
| 6 | 4 | 不在 seen → 添加并追加 | {1, 2, 3, 4} | [1, 2, 3, 4] |
最终结果: [1, 2, 3, 4]。