您好,登錄后才能下訂單哦!
這篇文章給大家介紹python中怎么對列表元素去重并保持原有順序,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
這個需求涉及到集合,上代碼前先講講集合。講集合前我們先回顧一下可變數據類型和不可變數據類型。
不可變數據類型:數字number(含int、float、bool、complex)、字符串string、元組tuple。
可變數據類型:列表list、字典dict、集合set。
集合的存取是基于hash算法映射,只有不可變數據類型才能做hash算法,所以集合中只能存放不可變數據類型。集合的特性是去重、無序。學集合時最先接觸的是交并差,每一本教python的書講到集合都不會漏講交并差,這里就不贅述了。
那么現在,我們需要將一個列表中的元素去重并保持原有順序。最優解是什么?
還是直接上代碼看案例吧:
raw_address = ['北京市', '北京市', '昌平區', '人民大街', '9999號'] # 客戶自行錄入的原始地址信息 # 數據庫中的地址信息是'北京市昌平區人民大街9999號',如何將客戶錄入的地址信息與數據庫中的地址信息進行匹配? address = list(set(raw_address)) # 對原始地址list先轉成集合再轉成列表,自動完成去重 print(address) # 輸出的是['人民大街', '昌平區', '9999號', '北京市'] address.sort(key=raw_address.index) # 再對去重后的列表按原始順序排列 print(address) # 輸出的是['北京市', '昌平區', '人民大街', '9999號']
可以看到用python對列表中的元素去重并保持原始的順序只要2行代碼即可完成,運行速度也相當高。
這背后是什么原理呢?
這是因為在python中變量實質是一種引用,上述案例中raw_address列表有5條字符串,分別存儲在內存不同的地址。rad_address列表中保存了5條字符串的內存地址,在去重的時候不需要對列表中的字符串兩兩匹配是否有重復(這種運算相當耗時),只要檢測是否存在相同的內存地址引用,去掉重復的引用只保留一條即可迅速去重。在還原順序的時候只要根據原列表的元素索引排序即可。
關于python中怎么對列表元素去重并保持原有順序就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。