平时处理数据、清洗列表时,去重是最常见的操作之一。
很多人上来就 set(),其实不同场景用对方法,又快又稳还不踩坑。
今天整理 7 种好用的去重方式,工作里随手就能用,按需选择就行。
| 场景 |
推荐 |
| 日常使用 |
dict.fromkeys() |
| 不要顺序、要最快 |
set() |
| 数据超过1000条 |
千万别用列表推导 |

arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
result = list(set(arr))
不需要顺序时用它,10万条数据只需5毫秒。
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
result = list(dict.fromkeys(arr))
日常使用首选!速度仅次于set(),同时保持原始顺序。
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
seen = []
result = [x for x in arr if x not in seen and not seen.append(x)]
只适合1000条以内的小数据,大数据用它会慢几十倍!
from itertools import groupby
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
result = [key for key, _ in groupby(sorted(arr))]
需要同时去重和排序时用它,结果会自动升序排列。
import numpy as np
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
result = list(np.unique(arr))
用NumPy处理数据时用它,还能顺便统计每个值出现几次。
import pandas as pd
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
result = pd.Series(arr).drop_duplicates().tolist()
用Pandas处理表格数据时用它,和其他操作链式调用很方便。
from collections import OrderedDict
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
result = list(OrderedDict.fromkeys(arr))
现在Python 3.7+普通dict已经有序,这个基本用不上了,了解即可。
| 方法 |
用时 |
保留顺序 |
set() |
5ms |
❌ |
dict.fromkeys() |
6ms |
✅ |
列表推导+not in |
15秒 |
✅ |
其他方法介于6-25ms之间。
重点记住:列表推导最慢,大数据量时千万别用!
- 日常用 →
dict.fromkeys()
- 不要顺序 →
set()
- 数据量大 → 避开列表推导
记住这3点,够用了!