當一個列表中出現重複的元素時,為了去除這些重複元素可以使用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],可以看出,重複的元素被去除了,而原有的元素順序得到了保留。
原創文章,作者:TWMGS,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/374013.html