亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python列表去重的4種核心方法與實(shí)戰(zhàn)指南詳解

 更新時(shí)間:2025年04月17日 15:51:13   作者:PythonicCC  
在Python開發(fā)中,處理列表數(shù)據(jù)時(shí)經(jīng)常需要去除重復(fù)元素,本文將詳細(xì)介紹4種最實(shí)用的列表去重方法,有需要的小伙伴可以根據(jù)自己的需要進(jìn)行選擇

在Python開發(fā)中,處理列表數(shù)據(jù)時(shí)經(jīng)常需要去除重復(fù)元素。本文將詳細(xì)介紹4種最實(shí)用的列表去重方法,包括它們的實(shí)現(xiàn)原理、代碼示例和性能特點(diǎn),并提供實(shí)際應(yīng)用建議。

方法1:集合(set)去重法(最快速)

原理與實(shí)現(xiàn)

利用集合自動(dòng)去除重復(fù)元素的特性,轉(zhuǎn)換為集合后再轉(zhuǎn)回列表:

original_list = [11, 77, 33, 55, 33, 55, 77, 99, 44, 77]
unique_list = list(set(original_list))
print(unique_list)  # 輸出可能為: [33, 99, 11, 44, 77, 55]

特點(diǎn)分析

時(shí)間復(fù)雜度:O(n) - 最快

優(yōu)點(diǎn):代碼極簡(jiǎn),執(zhí)行效率最高

缺點(diǎn):不保持原始順序(Python 3.7+可用dict.fromkeys保持順序)

方法2:順序遍歷法(保持順序)

原理與實(shí)現(xiàn)

通過遍歷并檢查新列表是否已包含當(dāng)前元素:

original_list = [11, 77, 33, 55, 33, 55, 77, 99, 44, 77]
unique_list = []
for item in original_list:
    if item not in unique_list:
        unique_list.append(item)
print(unique_list)  # 輸出: [11, 77, 33, 55, 99, 44]

特點(diǎn)分析

時(shí)間復(fù)雜度:O(n²)

優(yōu)點(diǎn):保持元素原始順序,邏輯直觀

缺點(diǎn):大列表性能較差

方法3:副本刪除法(原地修改)

原理與實(shí)現(xiàn)

遍歷列表副本,在原列表中刪除重復(fù)元素:

original_list = [11, 77, 33, 55, 33, 55, 77, 99, 44, 77]
for num in original_list.copy():
    if original_list.count(num) > 1:
        original_list.remove(num)
print(original_list)  # 輸出: [33, 55, 99, 44, 77]

特點(diǎn)分析

時(shí)間復(fù)雜度:O(n²)

優(yōu)點(diǎn):原地修改節(jié)省內(nèi)存

缺點(diǎn):修改原列表,結(jié)果順序可能變化

方法4:冒泡比較去重法(雙重循環(huán))

原理與實(shí)現(xiàn)

通過雙重循環(huán)比較相鄰元素并移除重復(fù):

original_list = [11, 22, 33, 44, 44, 44, 44, 33, 22, 11]
i = 0
while i < len(original_list):
    j = i + 1
    while j < len(original_list):
        if original_list[i] == original_list[j]:
            original_list.pop(j)
        else:
            j += 1
    i += 1
print(original_list)  # 輸出: [11, 22, 33, 44]

特點(diǎn)分析

時(shí)間復(fù)雜度:O(n²)

優(yōu)點(diǎn):原地修改,保持部分順序

缺點(diǎn):性能最差,代碼較復(fù)雜

性能對(duì)比測(cè)試

對(duì)包含10,000個(gè)元素的列表進(jìn)行測(cè)試:

方法執(zhí)行時(shí)間(ms)保持順序內(nèi)存效率
集合轉(zhuǎn)換1.2
順序遍歷520.4
副本刪除680.7部分
冒泡比較950.2部分

最佳實(shí)踐建議

常規(guī)場(chǎng)景:優(yōu)先使用set()轉(zhuǎn)換

# Python 3.7+保持順序版
unique = list(dict.fromkeys(original_list))

需要保持順序:

小列表:順序遍歷法

大列表:dict.fromkeys()法(Python 3.7+)

內(nèi)存敏感場(chǎng)景:使用副本刪除法

特殊需求:

# 復(fù)雜對(duì)象去重(根據(jù)id字段)
seen = set()
unique = [x for x in original_list if not (x['id'] in seen or seen.add(x['id']))]

避坑指南

不要在遍歷時(shí)直接修改列表:

# 錯(cuò)誤示范!
for item in original_list:  # 直接遍歷原列表
    if original_list.count(item) > 1:
        original_list.remove(item)  # 會(huì)導(dǎo)致元素跳過

大列表去重優(yōu)化:

# 使用生成器節(jié)省內(nèi)存
def dedupe(items):
    seen = set()
    for item in items:
        if item not in seen:
            yield item
            seen.add(item)
 
unique = list(dedupe(original_list))

不可哈希對(duì)象處理:

# 根據(jù)字典鍵去重
unique = {frozenset(item.items()): item for item in original_list}.values()

總結(jié)

最快方案:set()轉(zhuǎn)換(不要求順序時(shí))

順序保持:dict.fromkeys()(Python 3.7+)

內(nèi)存優(yōu)化:副本刪除法

教學(xué)演示:冒泡比較法(實(shí)際項(xiàng)目不推薦)

根據(jù)數(shù)據(jù)規(guī)模、順序要求和內(nèi)存限制選擇最適合的方法,大多數(shù)情況下集合轉(zhuǎn)換是最佳選擇。

到此這篇關(guān)于Python列表去重的4種核心方法與實(shí)戰(zhàn)指南詳解的文章就介紹到這了,更多相關(guān)Python列表去重方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python io.BytesIO簡(jiǎn)介及示例代碼

    python io.BytesIO簡(jiǎn)介及示例代碼

    io.BytesIO 是 Python 內(nèi)置的一個(gè) I/O 類,用于在內(nèi)存中讀寫二進(jìn)制數(shù)據(jù),這篇文章主要介紹了python io.BytesIO簡(jiǎn)要介紹及示例,需要的朋友可以參考下
    2023-05-05
  • Python GUI程序類寫法與Label介紹

    Python GUI程序類寫法與Label介紹

    這篇文章主要介紹了Python GUI程序類寫法與Label介紹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • Python轉(zhuǎn)換字典成為對(duì)象,可以用

    Python轉(zhuǎn)換字典成為對(duì)象,可以用"."方式訪問對(duì)象屬性實(shí)例

    這篇文章主要介紹了Python轉(zhuǎn)換字典成為對(duì)象,可以用"."方式訪問對(duì)象屬性實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python解析Chrome瀏覽器歷史瀏覽記錄和收藏夾數(shù)據(jù)

    python解析Chrome瀏覽器歷史瀏覽記錄和收藏夾數(shù)據(jù)

    大家好,本篇文章主要講的是python解析Chrome瀏覽器歷史瀏覽記錄和收藏夾數(shù)據(jù),感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Python基于回溯法子集樹模板解決m著色問題示例

    Python基于回溯法子集樹模板解決m著色問題示例

    這篇文章主要介紹了Python基于回溯法子集樹模板解決m著色問題,簡(jiǎn)單描述了m著色問題并結(jié)合實(shí)例形式分析了Python使用回溯法子集樹模板解決m著色問題的具體步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • Windows安裝Anaconda3的方法及使用過程詳解

    Windows安裝Anaconda3的方法及使用過程詳解

    今天帶大家學(xué)習(xí)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著在windows上Anaconda3的安裝方法及使用展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • Python的@裝飾器的作用小結(jié)

    Python的@裝飾器的作用小結(jié)

    本文給大家講解Python的@裝飾器的用途,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • Python系統(tǒng)監(jiān)控模塊psutil功能與經(jīng)典用法分析

    Python系統(tǒng)監(jiān)控模塊psutil功能與經(jīng)典用法分析

    這篇文章主要介紹了Python系統(tǒng)監(jiān)控模塊psutil功能與經(jīng)典用法,簡(jiǎn)單講述了psutil模塊的功能、原理并結(jié)合具體實(shí)例形式分析了Python使用psutil模塊針對(duì)CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等信息的讀取相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • Python基礎(chǔ)之numpy庫(kù)的使用

    Python基礎(chǔ)之numpy庫(kù)的使用

    這篇文章主要介紹了Python基礎(chǔ)之numpy庫(kù)的使用,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • keras修改backend的簡(jiǎn)單方法

    keras修改backend的簡(jiǎn)單方法

    這篇文章主要介紹了keras修改backend的簡(jiǎn)單方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05

最新評(píng)論