溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python中怎么對列表元素去重并保持原有順序

發(fā)布時間:2021-07-10 15:25:48 來源:億速云 閱讀:332 作者:Leah 欄目:互聯(lián)網(wǎng)科技

這篇文章給大家介紹python中怎么對列表元素去重并保持原有順序,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

這個需求涉及到集合,上代碼前先講講集合。講集合前我們先回顧一下可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型。

  • 不可變數(shù)據(jù)類型:數(shù)字number(含int、float、bool、complex)、字符串string、元組tuple。

  • 可變數(shù)據(jù)類型:列表list、字典dict、集合set。

集合的存取是基于hash算法映射,只有不可變數(shù)據(jù)類型才能做hash算法,所以集合中只能存放不可變數(shù)據(jù)類型。集合的特性是去重、無序。學(xué)集合時最先接觸的是交并差,每一本教python的書講到集合都不會漏講交并差,這里就不贅述了。

那么現(xiàn)在,我們需要將一個列表中的元素去重并保持原有順序。最優(yōu)解是什么?

還是直接上代碼看案例吧:

raw_address = ['北京市', '北京市', '昌平區(qū)', '人民大街', '9999號']  # 客戶自行錄入的原始地址信息
# 數(shù)據(jù)庫中的地址信息是'北京市昌平區(qū)人民大街9999號',如何將客戶錄入的地址信息與數(shù)據(jù)庫中的地址信息進行匹配?
address = list(set(raw_address))  # 對原始地址list先轉(zhuǎn)成集合再轉(zhuǎn)成列表,自動完成去重
print(address)  # 輸出的是['人民大街', '昌平區(qū)', '9999號', '北京市']
address.sort(key=raw_address.index)  # 再對去重后的列表按原始順序排列
print(address)  # 輸出的是['北京市', '昌平區(qū)', '人民大街', '9999號']

可以看到用python對列表中的元素去重并保持原始的順序只要2行代碼即可完成,運行速度也相當(dāng)高。

這背后是什么原理呢?

這是因為在python中變量實質(zhì)是一種引用,上述案例中raw_address列表有5條字符串,分別存儲在內(nèi)存不同的地址。rad_address列表中保存了5條字符串的內(nèi)存地址,在去重的時候不需要對列表中的字符串兩兩匹配是否有重復(fù)(這種運算相當(dāng)耗時),只要檢測是否存在相同的內(nèi)存地址引用,去掉重復(fù)的引用只保留一條即可迅速去重。在還原順序的時候只要根據(jù)原列表的元素索引排序即可。

關(guān)于python中怎么對列表元素去重并保持原有順序就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI