欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

原理與實現(xià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]

特點分析

時間復雜度:O(n) - 最快

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

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

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

原理與實現(xiàn)

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

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]

特點分析

時間復雜度:O(n²)

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

缺點:大列表性能較差

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

原理與實現(xiàn)

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

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]

特點分析

時間復雜度:O(n²)

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

缺點:修改原列表,結果順序可能變化

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

原理與實現(xiàn)

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

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]

特點分析

時間復雜度:O(n²)

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

缺點:性能最差,代碼較復雜

性能對比測試

對包含10,000個元素的列表進行測試:

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

最佳實踐建議

常規(guī)場景:優(yōu)先使用set()轉換

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

需要保持順序:

小列表:順序遍歷法

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

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

特殊需求:

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

避坑指南

不要在遍歷時直接修改列表:

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

大列表去重優(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))

不可哈希對象處理:

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

總結

最快方案:set()轉換(不要求順序時)

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

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

教學演示:冒泡比較法(實際項目不推薦)

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

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

相關文章

  • python io.BytesIO簡介及示例代碼

    python io.BytesIO簡介及示例代碼

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

    Python GUI程序類寫法與Label介紹

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

    Python轉換字典成為對象,可以用"."方式訪問對象屬性實例

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

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

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

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

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

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

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

    Python的@裝飾器的作用小結

    本文給大家講解Python的@裝飾器的用途,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    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)典用法,簡單講述了psutil模塊的功能、原理并結合具體實例形式分析了Python使用psutil模塊針對CPU、內(nèi)存、磁盤、網(wǎng)絡等信息的讀取相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • Python基礎之numpy庫的使用

    Python基礎之numpy庫的使用

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

    keras修改backend的簡單方法

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

最新評論