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]