pubanswer

如何使用 python 列表去重保持顺序不变?

michael2024-04-29

在Python中,列表是一种非常常用的数据结构,用于存储序列化的数据。然而,当处理数据时,我们经常会遇到需要去除列表中重复元素的情况,同时还希望保持原有元素的顺序不变。本文介绍几种有效的方法来实现这一需求。

方法一:使用循环和if条件

这是最直观的方法,适用于任何版本的Python。我们可以通过创建一个新列表,然后逐一检查原列表中的元素,如果它不在新列表中,就将其添加到新列表中。

def remove_duplicates_keep_order(seq):
    seen = []
    for item in seq:
        if item not in seen:
            seen.append(item)
    return seen

original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = remove_duplicates_keep_order(original_list)
print(unique_list)

方法二:使用字典

从Python 3.7开始,标准的字典保持了插入顺序,这意味着我们可以使用字典来轻松去重,同时保持元素的顺序。

def remove_duplicates_keep_order(seq):
    return list(dict.fromkeys(seq))

original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = remove_duplicates_keep_order(original_list)
print(unique_list)

方法三:使用集合和列表理解

这种方法利用了集合的去重能力和列表理解的简洁性。但是,直接使用集合会丢失原有顺序,因此我们需要稍作变通。

def remove_duplicates_keep_order(seq):
    seen = set()
    return [x for x in seq if not (x in seen or seen.add(x))]

original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = remove_duplicates_keep_order(original_list)
print(unique_list)

方法四:使用OrderedDict

对于Python 3.6以前的版本,OrderedDict可以被用来保持键的插入顺序,从而实现我们的需求。

from collections import OrderedDict

def remove_duplicates_keep_order(seq):
    return list(OrderedDict.fromkeys(seq))

original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = remove_duplicates_keep_order(original_list)
print(unique_list)