Python 列表(list) 去重是有多种方式的,这里分别介绍这几种方法是如何在Python列表中去重的。
列表(list)转集合(set)方法
我们知道Python的列表(list)中的元素是可以重复出现的,而对于集合(set)的元素只能出现一次,那么如果我们可以将列表转为集合,重复项将会被删除,即可实现列表的去重,但是不能保证元素元素的顺序。集合中元素的顺序由哈希机制决定,哈希机制可能与列表中的不同。
下面是列表转集合去重的例子。
#!/usr/bin/python
# coding=utf-8
lst=[10, 20, 10, 30, 50, 60, 40, 45, 30, 80]
set1=set(lst) #转为集合
print(list(set1)) #转为列表
输出:
[40, 10, 45, 80, 50, 20, 60, 30]
上面的输出结果中, 虽然去重了,但是没有保证原有元素的顺序。
使用for循环去重列表(list)
我们可以通过使用 Python in操作符,定义一个新的列表,对原有的列表进行遍历,如果新列表中不存在该元素则使用append()方法加入。
#!/usr/bin/python
# coding=utf-8
lst=[10, 20, 10, 30, 50, 60, 40, 45, 30, 80]
uniques=[]
for num in lst:
if num not in uniques:
uniques.append(num)
print(uniques)
输出:[10, 20, 30, 50, 60, 40, 45, 80]
使用 OrderedDict.fromkeys() 方法去重
OrderedDict是一个排序字典,可以根据字典的key值排序,因为字典的key也是没有重复的。
#!/usr/bin/python
# coding=utf-8
from collections import OrderedDict
lst=[10, 20, 10, 30, 50, 60, 40, 45, 30, 80]
sortkeys = list(OrderedDict.fromkeys(lst))
print(sortkeys)
输出:[10, 20, 30, 50, 60, 40, 45, 80]
使用reduce() 方法去重
使用reduce()函数是处理Python列表去重最好的方法。
#!/usr/bin/python
# coding=utf-8
from functools import reduce
lst=[10, 20, 10, 30, 50, 60, 40, 45, 30, 80]
tup = (list(), set())
def myfunction(temp, item):
if item not in temp[1]:
temp[0].append(item)
temp[1].add(item)
return temp
uniques=reduce(myfunction, lst, tup)[0]
print(uniques)
输出:[10, 20, 30, 50, 60, 40, 45, 80]