从可比较但不可哈希的项目列表中删除重复项的最快方法

10 浏览
0 Comments

从可比较但不可哈希的项目列表中删除重复项的最快方法

这个问题已经有了答案:

如何对Python列表进行排序和去重?[重复]

从列表中删除重复项

如果我只知道列表元素可以排序,我如何从列表中删除重复项?(我也不关心列表中项目的顺序。)

现有问题,如如何从Python列表中删除重复项并保持顺序?从列表中删除重复项 需要使用 set,也就是要求列表中的项可哈希。

在我的情况下,哈希性不能保证。

admin 更改状态以发布 2023年5月23日
0
0 Comments

编辑:查看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

0
0 Comments

在Python中,对已经排序的列表进行排序具有可忽略的开销。添加额外的复杂性和有可能有人在函数中不小心传递错误参数是不值得的。\n

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)]

0