python之如何進(jìn)行去重問題
python如何進(jìn)行去重
自定義函數(shù)去重
解析思路:
- 1、確定去重目標(biāo)
- 2、給一個(gè)空列表去接收去重后的元素
- 3、遍歷需要去重的序列,將重復(fù)數(shù)據(jù)過濾
- 4、打印去重后的數(shù)據(jù)
l = [1,1,3,2,2,3,4,2,5] new = [] for i in l: ? ? if i not in new: ? ? ? ? new.append(i) print(new)
輸出結(jié)果:
[1, 3, 2, 4, 5]
內(nèi)置函數(shù)去重
l = [1,1,3,2,2,3,4,2,5] b = list(set(l)) print(b)
輸出結(jié)果:
[1, 2, 3, 4, 5]
可以看出去重后改變了序列的順序,所以去重后需要按元素索引進(jìn)行排序,才會(huì)保持序列的原有順序
代碼如下:
l = [1,1,3,2,2,3,4,2,5] a = list(set(l)) a.sort(key=l.index) print(a)
輸出結(jié)果:
[1, 3, 2, 4, 5]
python列表常見的5種去重方式
列表去重在python實(shí)際運(yùn)用中,十分常見,也是最基礎(chǔ)的重點(diǎn)知識(shí)。
以下總結(jié)了5種常見的列表去重方法
一、使用for循環(huán)實(shí)現(xiàn)列表去重
- 此方法去重后,原順序保持不變。
# for循環(huán)實(shí)現(xiàn)列表去重 list1 = ['a', 'b', 1, 3, 9, 9, 'a'] list2 = [] for l1 in list1: ? ? if l1 not in list2: ? ? ? ? list2.append(l1) print(list2)
結(jié)果:[‘a’, ‘b’, 1, 3, 9]
二、使用列表推導(dǎo)式去重
- 此方法去重后,原順序保持不變。
# 使用列表推導(dǎo)式去重 list1 = ['a', 'b', 1, 3, 9, 9, 'a'] res = [] [res.append(i) for i in list1 if i not in res] print(res)
結(jié)果:[‘a’, ‘b’, 1, 3, 9]
三、使用集合轉(zhuǎn)換函數(shù)set()實(shí)現(xiàn)列表去重
- 原理:同一個(gè)集合的元素之間是不允許重復(fù)的
# set()列表去重 list1 = ['a', 'b', 1, 3, 9, 9, 'a'] list2 = list(set(list1)) print(list2)
結(jié)果:[1, 3, 9, ‘b’, ‘a’]
問題:使用set()函數(shù)去重后,會(huì)自動(dòng)排序,則原列表的順序會(huì)發(fā)生改變
解決辦法有2種:
- 第一種方法,使用sort()方法
# # 第一種方法,sort() list1 = ['a', 'b', 1, 3, 9, 9, 'a'] list2 = list(set(list1)) list2.sort(key=list1.index) print(list2)
結(jié)果:[‘a’, ‘b’, 1, 3, 9]
注:sort()方法沒有返回值,對(duì)列表元素進(jìn)行原地排序
- 第二種方法,使用sorted()函數(shù)
# 第二種方法,sored() list1 = ['a', 'b', 1, 3, 9, 9, 'a'] list2 = sorted(list(set(list1)), key=list1.index) print(list2)
結(jié)果:[‘a’, ‘b’, 1, 3, 9]
注:python內(nèi)置函數(shù)sorted()函數(shù)返回新的列表,并不對(duì)原列表做任何修改
四、使用新建字典方式實(shí)現(xiàn)列表去重
- 原理:字典的"鍵"是不允許重復(fù)的
- 此方法去重后,原來順序保持不變。
# 使用新建字典實(shí)現(xiàn)列表去重 list1 = ['a', 'b', 1, 3, 9, 9, 'a'] dic = {} dic = dic.fromkeys(list1).keys() print(list(dic))
結(jié)果:[‘a’, ‘b’, 1, 3, 9]
五、刪除列表中存在重復(fù)的數(shù)據(jù)
- 上面的4種去重方法,都是保留一個(gè),刪除其他
- 下面這種方法則是,只要存在重復(fù),一個(gè)都不保留
# 刪除存在重復(fù)的值,不保留 list1 = ['a', 'b', 1, 3, 9, 9, 'a'] list2 = [i for i in list1 if list1.count(i) == 1] print(list2)
結(jié)果:[‘b’, 1, 3]
好了,這就是關(guān)于列表去重的5種方法,可以根據(jù)需求選擇對(duì)應(yīng)的方法。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中八種數(shù)據(jù)導(dǎo)入方法總結(jié)
數(shù)據(jù)分析過程中,需要對(duì)獲取到的數(shù)據(jù)進(jìn)行分析,往往第一步就是導(dǎo)入數(shù)據(jù)。導(dǎo)入數(shù)據(jù)有很多方式,不同的數(shù)據(jù)文件需要用到不同的導(dǎo)入方式,相同的文件也會(huì)有幾種不同的導(dǎo)入方式。下面總結(jié)幾種常用的文件導(dǎo)入方法2022-11-11一文帶你深入理解python中pytest-repeat插件的工作原理
這篇文章主要和大家一起深入探討到底pytest_repeat插件的具體功能是如何實(shí)現(xiàn)的呢,相信具體了解了該插件,其他三方插件也可以很快了解它內(nèi)部運(yùn)行機(jī)制,所以本文詳細(xì)講解了python pytest-repeat插件的工作原理,需要的朋友可以參考下2023-09-09Python系統(tǒng)公網(wǎng)私網(wǎng)流量監(jiān)控實(shí)現(xiàn)流程
這篇文章主要介紹了Python系統(tǒng)公網(wǎng)私網(wǎng)流量監(jiān)控實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Python分布式進(jìn)程中你會(huì)遇到的問題解析
這篇文章主要介紹了Python分布式進(jìn)程中你會(huì)遇到的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05使用Python實(shí)現(xiàn)文本轉(zhuǎn)語音(TTS)并播放音頻
在開發(fā)涉及語音交互或需要語音提示的應(yīng)用時(shí),文本轉(zhuǎn)語音(TTS)技術(shù)是一個(gè)非常實(shí)用的工具,下面我們來看看如何使用gTTS和playsound庫將文本轉(zhuǎn)換為語音并播放音頻文件吧2025-03-03在PyCharm中打包Python項(xiàng)目并將其運(yùn)行到服務(wù)器上的方法(推薦)
在PyCharm中打包Python項(xiàng)目并運(yùn)行到服務(wù)器上,主要步驟包括:創(chuàng)建并設(shè)置項(xiàng)目、編寫項(xiàng)目代碼、打包項(xiàng)目、配置服務(wù)器環(huán)境、上傳可執(zhí)行文件到服務(wù)器以及運(yùn)行項(xiàng)目,通過這些步驟,可以將Python項(xiàng)目打包并部署到服務(wù)器上2024-11-11python基礎(chǔ)教程之簡(jiǎn)單入門說明(變量和控制語言使用方法)
這篇文章主要介紹了開始學(xué)習(xí)python的第一步需要知道的知識(shí)(變量和控制語言使用方法),需要的朋友可以參考下2014-03-03在Python中使用__slots__方法的詳細(xì)教程
這篇文章主要介紹了在Python中使用__slots__方法的詳細(xì)教程,__slots__方法是Python的一個(gè)重要內(nèi)置類方法,代碼基于Python2.x版本,需要的朋友可以參考下2015-04-04