一、实现目标
在python中现有如下列表:
["a", "b", "a", "c", "b", "a"]
如何实现此列表去重,并保持原来的顺序不变。即变成如下新列表。
["a", "b", "c"]
二、问题分析
如果用set()直接去重,就难以保证列表元素原来的顺序,因此不能直接用set。而是用下面的两种办法。
1.空列表法
采用空列表法,新建一个空列表,然后遍历旧列表,如果新列表没有,就把旧列表的元素添加进去,这样就实现了列表去重,代码如下:
old = ["a", "b", "a", "c", "b", "a"]
new = []
for item in old:
if item not in new:
new.append(item)
print(new)
2. 字典法
采用字典法,利用dict.fromkeys(),这种方法建立起键名为old元素,键值为none的字典,由于字典不能重复,所以重复键名会被删除,并保留原来的元素顺序,相对前者的遍历、判断,方法更为简单,代码如下:
old = ["a", "b", "a", "c", "b", "a"]
dic = dict.fromkeys(old)
new = list(dic.keys())
print(new)
字典法展示
也可以使用OrderedDict这个包来为列表去重,并保持原来的顺序。
from collections import OrderedDict
# 初始列表
original_list = ["a", "b", "a", "c", "b", "a"]
# 使用有序字典去重,同时保持顺序
unique_list = list(OrderedDict.fromkeys(original_list))
print(unique_list)
三、学后反思
- 两种方法更有所长,但是第二方法更为简单,代码量最少,效率应该是最高。第一种方法由于要遍历和判断,可能效率有点儿低。
- 学习Python有时要多种方法并用,虽然殊途同归,但可以更好地把各个知识点融汇贯通,增强对知识点的理解和把握。
- 字典的用途非常广泛,无论是列表去重、词频统计、批量替换,都少不了它的身影,所以要认真地学习,多多上机操练,用一些常用的案例来巩固所学的知识。