首页 > 编程知识 正文

Python set去重保留原顺序

时间:2023-11-22 13:59:12 阅读:290685 作者:DQIY

当一个列表中出现重复的元素时,为了去除这些重复元素可以使用Python提供的集合(set)数据结构,集合可以去除元素的重复出现。然而,这样会导致原有的元素顺序混乱,这时,需要使用一些方法在去除重复元素的同时保留原列表的顺序。

一、使用列表和字典

列表和字典的结合可以很好地实现去重但保留原顺序的功能。先将每个元素当作键存入一个字典中,再将字典的键转换为一个新列表,即可得到去重且原顺序的列表。

def deduplication(lst):
    dedup_dict = {}
    for item in lst:
        dedup_dict[item] = None
    return list(dedup_dict.keys())

上面代码中,首先定义了一个空的字典dedup_dict,然后遍历列表lst,将其中的每个元素当作字典dedup_dict的键,赋值为None。最后返回字典的键组成的列表,即得到了去重但保留原顺序的新列表。

二、使用有序集合ordered-set

Python提供了一个名为ordered-set的第三方库,它基于集合和列表实现,可以很好地处理去重但保留原顺序的问题。

在安装完ordered-set库后,只需要将列表传入OrderedSet类中,即可返回去重但保留原顺序的OrderedSet对象。示例代码如下:

from ordered_set import OrderedSet

lst = [3, 5, 2, 6, 2, 1, 3]
new_lst = list(OrderedSet(lst))
print(new_lst)

输出结果为:[3, 5, 2, 6, 1],可以看出,重复的元素被去除了,而原有的元素顺序得到了保留。

三、使用列表推导式

几乎所有Python程序员都熟悉列表推导式,它是Python中非常强大和优美的语法功能。使用列表推导式也可以很好地实现去重且保留原顺序的功能。

lst = [3, 5, 2, 6, 2, 1, 3]
new_lst = []
[new_lst.append(i) for i in lst if i not in new_lst]
print(new_lst)

输出结果为:[3, 5, 2, 6, 1],可以看出,重复的元素被去除了,而原有的元素顺序得到了保留。

四、使用Python 3.7中的字典

Python 3.7版本中引入了一种新的字典类型dict类型,它使用了一种新的实现方式,可以保证字典元素的顺序和插入顺序一致。因此,可以将原列表中的元素放入dict中,再使用dict的keys()方法获取去重后的元素,最后将其转换为列表即可。

lst = [3, 5, 2, 6, 2, 1, 3]
new_lst = list(dict.fromkeys(lst))
print(new_lst)

输出结果为:[3, 5, 2, 6, 1],可以看出,重复的元素被去除了,而原有的元素顺序得到了保留。

五、使用pandas库

如果您的Python项目中引入了pandas库,可以使用pandas中的unique()方法快速地去除列表中的重复元素,并保留原顺序。唯一需要注意的是,该方法返回的结果是一个numpy数组,需要将其转换为列表类型。

import pandas as pd

lst = [3, 5, 2, 6, 2, 1, 3]
new_lst = list(pd.unique(lst))
print(new_lst)

输出结果为:[3, 5, 2, 6, 1],可以看出,重复的元素被去除了,而原有的元素顺序得到了保留。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。