说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
我们知道 Python 的列表(list)允许元素相同,但在某些需求情况下需要仅保留不重复的值。这种情况下,我们首先想到的是把列表(list)转为集合(set),但转为 set 后就丢失了元素的顺序,我们试验一下:
items = [2, 2, 1, 2, 3, 4]
# 将列表转为 集合
set(items)
# {1, 2, 3, 4}
我们看到,元素去重后顺序没有得到保留,那么,我们怎么既能对列表中的元素去重又能保留元素的先后顺序呢?
我们可以利用字典(dict)的键(key)不重复的特点,将这些元素放心键中,同时再利用在 Python 3.7 及以上版本字典会保留顺序的特性来进行操作。如:
items = [2, 2, 1, 2, 3, 4]
# 将元素写入字典的键
dict.fromkeys(items)
# {2: None, 1: None, 3: None, 4: None}
# 转为列表
[*dict.fromkeys(items)] # 推荐用解包操作
list(dict.fromkeys(items))
# [2, 1, 3, 4]
可以用 Python 内置库的 OrderedDict 对象显式地使用顺序特征:
from collections import OrderedDict
items = [2, 2, 1, 2, 3, 4]
OrderedDict.fromkeys(items)
# OrderedDict([(2, None), (1, None), (3, None), (4, None)])
[*OrderedDict.fromkeys(items)]
# [2, 1, 3, 4]
这个方法可用在 Python 3.5 及以下版本中(包括 Python 2.7)。
可以先用用 set 去重,再用内置函数 sorted 进行排序,排序时,可以用参数 key 指定排序的的依据为列表的索引(items.index),代码如:
items = [2, 2, 1, 2, 3, 4]
sorted(set(items), key=items.index)
# [2, 1, 3, 4]
Python 的专业数据分析三方库 pandas 的 Series 数据结构的 unique() 方法可以对数据去重同时保留顺序,操作后再转为列表。见:
import pandas as pd
items = [2, 2, 1, 2, 3, 4]
pd.Series(items).unique()
# array([2, 1, 3, 4])
[*pd.Series(items).unique()]
# [2, 1, 3, 4]
关于 Pandas 的使用,可以参考 2021 年出版的 《深入浅出Pandas:利用Python进行数据处理与分析》,该书的网站为 gairuo.com/p/pandas。
另外还可以直接用 pd.unique()
进行去重:
import pandas as pd
items = [2, 2, 1, 2, 3, 4]
[*pd.unique(items)]
# [2, 1, 3, 4]
注意:这个方法是最为简单的,因此强烈推荐学习 Pandas。
更新时间:2024-08-18 16:31:59 标签:python 去重 列表