如果我所知道的是可以订购列表元素,如何从列表中删除重复的项目? (我也不关心列表中项目的顺序。)
How to remove duplicates from Python list and keep order?或Removing duplicates in lists等现有问题需要使用集合,即要求列表中的项目可以清除。 就我而言,可靠性不是保证。
答案 0 :(得分:4)
在已经排序的列表上调用排序在Python中的开销可以忽略不计。它不值得添加额外的复杂性以及有人意外地将错误的参数传递给函数的可能性
from itertools import groupby
def remove_duplicates(data):
''' Remove duplicates from the data (normally a list).
The data must be sortable and have an equality operator
'''
data = sorted(data)
return [k for k, v in groupby(data)]
答案 1 :(得分:0)
编辑:请参阅John La Rooy的答案以获得更好的答案。
同样,该解决方案仅适用于可排序列表。如果你预先对它进行了排序(实际上对象只需要分组),你可以设置sort = False,然后它只需要比较运算符。
def remove_duplicates(data, sort=True):
''' Remove duplicates from the data (normally a list).
The data must be sortable and have an equality operator
'''
if not data:
return data
if sort:
data = sorted(data)
out = [data[0]]
for i, n in enumerate(data[1:]):
if data[i] != n:
out.append(n)
return out