在Python中去除列表重復(fù)項并保留順序的四種方法
引言
在 Python 編程中,列表(list)是一種常用的數(shù)據(jù)結(jié)構(gòu),但有時列表中會出現(xiàn)重復(fù)項,這可能會影響程序的執(zhí)行效率或?qū)е洛e誤結(jié)果。本文將為你詳細介紹如何去除列表中的重復(fù)項,并保留元素的原始順序,讓你輕松掌握這一實用技能,開啟高效編程之旅。
列表與集合的區(qū)別
列表和集合(set)是 Python 中兩種重要的數(shù)據(jù)結(jié)構(gòu)。它們的主要區(qū)別在于:列表中的元素可以重復(fù)出現(xiàn),而集合中的元素必須唯一。因此,如果我們把一個列表轉(zhuǎn)換為集合,重復(fù)項就會被自動去除。不過,集合中的元素順序是不固定的,這與列表中元素的原始順序可能不同。例如:
原列表 = [5, 10, 15, 20, 3, 15, 25, 20, 30, 10, 100] 集合 = set(原列表) print(list(集合)) # 輸出結(jié)果可能為 [3, 100, 5, 10, 15, 20, 25, 30]
可以看到,轉(zhuǎn)換后的集合雖然去除了重復(fù)項,但元素順序發(fā)生了變化。
去除重復(fù)項并保留順序的方法
方法一:使用 for 循環(huán)追加唯一項到新列表
我們可以創(chuàng)建一個空列表,然后遍歷原列表,將第一次出現(xiàn)的元素追加到新列表中。這種方法簡單易懂,適合初學(xué)者。
原列表 = [5, 10, 15, 20, 3, 15, 25, 20, 30, 10, 100]
去重列表 = []
for 數(shù)字 in 原列表:
if 數(shù)字 not in 去重列表:
去重列表.append(數(shù)字)
print(去重列表) # 輸出 [5, 10, 15, 20, 3, 25, 30, 100]方法二:使用列表推導(dǎo)式
列表推導(dǎo)式可以使代碼更加簡潔。但需要注意的是,這種方法在處理大量數(shù)據(jù)時,效率可能不如其他方法。
原列表 = [5, 10, 15, 20, 3, 15, 25, 20, 30, 10, 100] 去重列表 = [] [去重列表.append(數(shù)字) for 數(shù)字 in 原列表 if 數(shù)字 not in 去重列表] print(去重列表) # 輸出 [5, 10, 15, 20, 3, 25, 30, 100]
方法三:使用 OrderedDict.fromkeys()
在 Python 3.7 及以后版本中,普通字典已經(jīng)支持插入順序。但在早期版本中,可以使用 collections 模塊中的 OrderedDict 類來保留元素順序。fromkeys() 方法可以基于列表元素創(chuàng)建一個有序字典,然后將其轉(zhuǎn)換回列表。
原列表 = [5, 10, 15, 20, 3, 15, 25, 20, 30, 10, 100] from collections import OrderedDict 去重列表 = list(OrderedDict.fromkeys(原列表)) print(去重列表) # 輸出 [5, 10, 15, 20, 3, 25, 30, 100]
方法四:使用 reduce() 函數(shù)
reduce() 函數(shù)是 functools 模塊中的一個高效工具。它允許我們通過一個累積器來處理列表元素,從而實現(xiàn)去除重復(fù)項并保留順序的功能。
from functools import reduce
原列表 = [5, 10, 15, 20, 3, 15, 25, 20, 30, 10, 100]
初始值 = ([], set()) # 用于存儲去重后的列表和已存在的元素集合
def 去重函數(shù)(累積器, 元素):
列表, 集合 = 累積器
if 元素 not in 集合:
列表.append(元素)
集合.add(元素)
return 列表, 集合
去重列表 = reduce(去重函數(shù), 原列表, 初始值)[0]
print(去重列表) # 輸出 [5, 10, 15, 20, 3, 25, 30, 100]到此這篇關(guān)于在Python中去除列表重復(fù)項并保留順序的四種方法的文章就介紹到這了,更多相關(guān)Python去除列表重復(fù)項并保留順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python opencv圓、橢圓與任意多邊形的繪制實例詳解
在本篇文章里小編給大家整理的是關(guān)于python-opencv-圓、橢圓與任意多邊形的繪制內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。2020-02-02
Python和Ruby中each循環(huán)引用變量問題(一個隱秘BUG?)
這篇文章主要介紹了Python和Ruby中each循環(huán)引用變量問題,類似PHP的foreach中使用引用變量的問題,需要的朋友可以參考下2014-06-06
python實現(xiàn)多進程按序號批量修改文件名的方法示例
這篇文章主要介紹了python實現(xiàn)多進程按序號批量修改文件名的方法,涉及Python多進程與文件相關(guān)操作技巧,需要的朋友可以參考下2019-12-12
Python實現(xiàn)一個完整學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細介紹了如何利用python實現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο蟀妫?,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2023-01-01
Python操作Word文檔屬性與字數(shù)統(tǒng)計的方法詳解
這篇文章主要為大家詳細介紹了Python操作Word文檔屬性與字數(shù)統(tǒng)計的相關(guān)方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-04-04

