日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python列表去重復項的N種方法(實例代碼)

瀏覽:205日期:2022-07-25 17:15:29

說明

Python語言中列表(List)與其他語言的數組(Array)類似,是一種有序的集合數據結構,Python List可支持各種數據類型,長度也可動態調整,與JS中的數組或Java ArrayList很接近。在實際編程中,經常會遇到數組或列表去掉重復項,保持成員唯一性。實現方式有多種,比如新建列表來存儲非重復項,或者在原有基礎上刪除掉重復的項,也可以利用數據結構來達到去重復。具體哪一種方法更好呢?以下約20種方式都可以實現,我們可以通過這些來交流和學習。

Python列表去重復項的N種方法(實例代碼)

方式

## 1. 新建列表,如果新列表中不存在,則添加到新列表。 def unique(data): new_list = [] for item in data: if item not in new_list: new_list.append(item) return new_list # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('new_list + not in data:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') # result $ python -V Python 2.7.16 $ python unique.py (’for list + not in. data:’, [’a’, 1, 2, ’b’]) time:0.0441074371338 ms ## 2. 新建列表。根據下標判斷是否存在新列表中,如果新列表中不存在則添加到新列表。 def unique(data): new_list = [] for i in range(len(data)): if data[i] not in new_list: new_list.append(data[i]) return new_list ## 2.1 新建列表,使用列表推導來去重。是前一種的簡寫。 def unique(data): new_list = [] [new_list.append(i) for i in data if not i in new_list] return new_list # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('for range + not in. data:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 3. 通過index找不到該項,則追加到新列表中。index找不到會報錯,因此放在異常處理里。 def unique(data): new_list = [] for i in range(len(data)): item = data[i] try: if (new_list.index(item) < 0): print(’new_list:’, new_list) except ValueError: new_list.append(item) return new_list # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('list index + except:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 4. 新建列表,兩個循環。如果內循環與外循環項相同,且下標相同就添加到新列表,其余忽略 def unique(data): new_list = [] for i in range(len(data)): j = 0 while j <= i: if data[i] == data[j]: if i == j: new_list.append(data[i]) break j += 1 return new_list # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('new list + for. new_list:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 5. 在原有列表上移除重復項目。自后往前遍歷,逐個與前面項比較,如果值相同且下標相同,則移除當前項。 def unique(data): l = len(data) while (l > 0): l -= 1 i = l while i > 0: i -= 1 if data[i] == data[l]: del data[l] break return data # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('one list while. last -> first result. data:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 6. 在原有列表上移除重復項目。自前往后遍歷,逐個與后面項比較,如果值相同且下標相同,則移除當前項。 def unique(data): l = len(data) i = 0 while i < l: j = i + 1 while j < l: if data[i] == data[j]: del data[j] l -= 1 i -= 1 break j += 1 i += 1 return data # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('one list while. first -> last result. data:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 7. 新建列表。遍歷列表,利用index比較出現的位置,如果出現在第一次的位置則追加到新數組。 def unique(data): new_list = [] for i in range(len(data)): if i == data.index(data[i]): new_list.append(data[i]) return new_list # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('for range + index. data:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 8. 利用字典屬性唯一性來實現去重復。 def unique(data): obj = {} for item in data: obj[item] = item return obj.values() # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('list + dict:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 或者直接通過dict.fromkeys來實現 print('dict fromkeys:', dict.fromkeys(data).keys()) ## 9. 利用filter函數,即把不符合條件的過濾掉。這里filter不支持下標,因此需要借助外部列表存儲不重復項 def uniq(item): i = data.index(item) if (item not in new_list): new_list.append(item) return True return False def unique(item): if obj.get(item) == None: obj[item] = item return True return False # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() new_list = [] print(’filter + list + not in: ’, filter(uniq, data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 10. 利用字典結合過濾來實現去重復。 def unique(item): if obj.get(item) == None: obj[item] = item return True return False # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() obj = {} print('filter + dict + get:', filter(unique, data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 11. 利用map來實現去重復。與map與filter類似,是一個高階函數。可以針對其中項逐個修改操作。 ## 與filter不同map會保留原有項目,并不會刪除,因此值可以改為None,然后再過濾掉。 def unique(item): if item not in new_list: new_list.append(item) return item return None # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] new_list = [] start_time = time.time() print('list from Map:', filter(lambda item: item != None, map(unique, data))) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 12. 利用set數據結構里key的唯一性來去重復 data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] print('from Set:', list(set(data))) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 13. 提前排序,從后向前遍歷,將當前項與前一項對比,如果重復則移除當前項 def unique(data): data.sort() l = len(data) while (l > 0): l -= 1 if (data[l] == data[l - 1]): data.remove(data[l]) return data # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('sort + remove:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 14. 提前排序,自前往后遍歷,將當前項與后一項對比,如果重復則移除當前項 def unique(data): ''' in python 3: TypeError: ’<’ not supported between instances of ’int’ and ’str’ need to keep the same Type of member in List ''' data.sort() l = len(data) - 1 i = 0 while i < l: if (data[i] == data[i + 1]): del data[i] i -= 1 l -= 1 i += 1 return data # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('sort+del ASE:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 15. 利用reduce函數來去重復。reduce具有累計的作用,判斷如果不在累計結果中出現,則追加到結果中。 import functools def unique(data): new_list = [] def foo(result, item): if isinstance(result, list) == False: result = [result] return result if item in result else result + [item] return functools.reduce(foo, data) # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('functools.reduce:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 16. 利用遞歸調用來去重復。遞歸自后往前逐個調用,當長度為1時終止。 ## 當后一項與前任一項相同說明有重復,則刪除當前項。相當于利用自我調用來替換循環 def recursion_unique(data, len): if (len <= 1): return data l = len last = l - 1 is_repeat = False while (l > 1): l -= 1 if (data[last] == data[l - 1]): is_repeat = True break if (is_repeat): del data[last] return recursion_unique(data, len - 1) # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('recursion_unique:', recursion_unique(data, len(data))) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 17. 利用遞歸調用來去重復的另外一種方式。遞歸自后往前逐個調用,當長度為1時終止。 ## 與上一個遞歸不同,這里將不重復的項目作為結果拼接起來 def recursion_unique_new(data, len): if (len <= 1): return data l = len last = l - 1 is_repeat = False while (l > 1): l -= 1 if (data[last] == data[l - 1]): is_repeat = True break if (is_repeat): del data[last:] result = [] else: result = [data[last]] return recursion_unique_new(data, len - 1) + result # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('recursion_unique_new:', recursion_unique_new(data, len(data))) print('time:' + str((time.time() - start_time) * 1000) + ' ms') ## 18. 利用numpy lib庫. 需提前安裝 `pip install numpy` import numpy as np def unique(data): res = np.array(data) return list(np.unique(res)) # test data = [’a’, ’a’, 1, 1, 2, 2, ’b’, ’b’, 2, 1] start_time = time.time() print('import numpy as np.unique:', unique(data)) print('time:' + str((time.time() - start_time) * 1000) + ' ms') Python列表去重復項的N種方法(實例代碼)

討論

從以上例子上可以看出,相對來講,Python比起其它語言要靈活得多,與JS并列最流行的腳本類語言,這也就是為何Python如此流行的原因吧。

哪一種方式更適合呢?你常用那種方式來實現去重復項?新建數組、非新建、借助Dict或Set等結構,亦或是其它方式?

Python列表去重復項的N種方法(實例代碼)

總結

到此這篇關于Python列表去重復項的N種方法的文章就介紹到這了,更多相關python列表去重復項內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品v一区二区三区| 免费看黄色91| 中文字幕免费一区二区| 久久香蕉国产| 久久毛片亚洲| 国产一区精品福利| 精品一区二区三区免费看| 国产日产一区| 欧美成人aaa| 久久只有精品| 国产精品第十页| 国产亚洲精aa在线看| 日本在线成人| 午夜精品影视国产一区在线麻豆| 一级欧美视频| 色婷婷成人网| 久久精品 人人爱| 国产精品中文字幕亚洲欧美| 国产精品99久久免费观看| 国产精品久久久久av蜜臀 | 999久久久91| 激情欧美亚洲| 首页亚洲欧美制服丝腿| 亚洲欧洲日韩| 国产日韩欧美一区二区三区| 蜜臀国产一区二区三区在线播放| 国内自拍视频一区二区三区| 麻豆久久一区二区| 国产美女亚洲精品7777| 久久av网址| 欧美日韩水蜜桃| 日韩专区视频网站| 99久久久久久中文字幕一区| 日韩欧美中文字幕一区二区三区| 久久久夜夜夜| 精精国产xxxx视频在线野外| 日本久久黄色| 国产综合欧美| 亚洲在线久久| 久久国产精品免费一区二区三区 | 日韩欧美美女在线观看| 国产精品分类| 亚洲福利国产| 亚洲欧洲日韩精品在线| 久久中文欧美| 亚洲激情五月| 国产乱人伦精品一区| 亚洲一区资源| 国产一区二区三区久久 | 亚洲免费资源| 国产精品亚洲人成在99www| 久久精品在线| 日韩欧美午夜| 视频小说一区二区| 久久av一区| 日韩精品91亚洲二区在线观看| 国产一区二区三区黄网站| 欧美日一区二区| 蜜桃视频第一区免费观看| 久久久久亚洲精品中文字幕| 国内精品福利| 国产无遮挡裸体免费久久| 日韩电影二区| 91看片一区| 午夜在线精品| 亚洲www啪成人一区二区| 日韩欧美字幕| 99精品电影| 日韩欧美精品一区二区综合视频| 亚洲三级毛片| 日韩高清一级| 视频国产精品| 精品三级在线观看视频| 国产高清一区| 国产精品亚洲产品| 亚洲大全视频| 久久中文在线| 亚洲深夜福利在线观看| 日韩高清不卡| 亚洲乱码一区| 日韩成人综合| 国产精品乱战久久久| 99国产精品私拍| 91亚洲国产成人久久精品| 香蕉久久夜色精品国产| 91免费精品| 欧美一级网站| 麻豆91精品| 欧美日韩免费看片| 国产一级成人av| 日韩中文欧美在线| 日韩毛片在线| 久久精品国内一区二区三区| 亚洲小说春色综合另类电影| 日韩电影免费网址| 日韩高清三区| 日韩专区欧美专区| 亚洲网站视频| 最近高清中文在线字幕在线观看1| 日韩三区四区| 亚洲精品1区2区| 日韩一区自拍| 九九99久久精品在免费线bt| 日本a口亚洲| 视频一区二区欧美| 亚洲精品电影| 久久婷婷av| 日韩电影免费网址| 激情综合五月| 日本激情一区| 精品高清久久| 日韩精品第一区| 免费观看久久久4p| 亚洲一级网站| 美女亚洲一区| sm久久捆绑调教精品一区| 国产午夜久久av| 日本亚洲欧美天堂免费| 亚洲三级网址| 日韩在线网址| 九九久久国产| 久久激情综合网| 婷婷精品久久久久久久久久不卡| 99国产精品久久久久久久| 国产精品毛片一区二区在线看| 国产亚洲欧美日韩精品一区二区三区 | 美女黄网久久| 在线视频日韩| 夜夜精品视频| 在线视频亚洲| 欧美一区=区| 狠狠色综合网| 亚洲免费在线| 蜜桃一区二区三区在线观看| 视频一区二区中文字幕| 久久高清免费观看| 欧美专区18| 在线免费观看亚洲| 亚洲影视一区| 97久久亚洲| 国产精品麻豆成人av电影艾秋| 国产免费av一区二区三区| 国产精品白浆| 久久久久久色| 国产欧美日韩一区二区三区四区 | 精品国产亚洲日本| 国产精品久久久久久久免费观看 | 另类激情亚洲| 欧美亚洲福利| 国产99久久久国产精品成人免费| 亚洲午夜在线| 一区二区三区国产在线| 成人在线免费观看91| 蜜桃av一区二区| 午夜在线一区二区| 亚洲午夜久久| 国产精品多人| 六月婷婷综合| 黄色av日韩| 亚洲三级视频| 国产乱码精品一区二区亚洲| 久久精品国内一区二区三区| 欧美aa在线观看| 国产午夜久久| 日韩国产成人精品| 国产麻豆精品| zzzwww在线看片免费| 午夜国产精品视频| 午夜亚洲福利| 精品一区不卡| 99久久九九| 亚洲ab电影| 麻豆91小视频| 精品中文一区| 亚洲+小说+欧美+激情+另类| 国产激情精品一区二区三区| 欧美一级鲁丝片| 亚洲欧美日本国产专区一区| 欧美在线日韩| 日韩欧美二区| 欧美中文字幕| 麻豆一区二区在线| 欧美日韩视频一区二区三区| 日韩av资源网| 欧美片第1页| 天堂久久av| 日产精品一区| 日本不卡在线视频| 日韩一区亚洲二区| 婷婷亚洲成人| 群体交乱之放荡娇妻一区二区| 视频在线观看91| 精品精品久久| 丝瓜av网站精品一区二区| 欧美精品97| 激情视频一区二区三区| 一区二区三区四区在线观看国产日韩| 国产白浆在线免费观看| 国产精品一区二区三区www| 亚洲欧美在线综合|