最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

原理與實現(xiàn)

利用集合自動去除重復(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]

特點分析

時間復(fù)雜度: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]

特點分析

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

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

缺點:大列表性能較差

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

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

特點分析

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

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

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

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

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

特點分析

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

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

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

性能對比測試

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

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

最佳實踐建議

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

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

需要保持順序:

小列表:順序遍歷法

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

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

特殊需求:

# 復(fù)雜對象去重(根據(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)  # 會導(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))

不可哈希對象處理:

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

總結(jié)

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

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

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

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

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

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

相關(guān)文章

  • 基于PyQt5完成的PDF拆分功能

    基于PyQt5完成的PDF拆分功能

    這篇文章主要介紹了基于PyQt5完成的PDF拆分功能,本文介紹的pdf拆分功能還有一些待完善地方,例如可增加預(yù)覽功能,實現(xiàn)每頁預(yù)覽,以及如何實現(xiàn)多條件拆分,需要的朋友可以參考下
    2022-06-06
  • jenkins配置python腳本定時任務(wù)過程圖解

    jenkins配置python腳本定時任務(wù)過程圖解

    這篇文章主要介紹了jekins配置python腳本定時任務(wù)過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 淺析Python實現(xiàn)DFA算法

    淺析Python實現(xiàn)DFA算法

    DFA全稱為Deterministic Finite Automaton,即確定有窮自動機。特征:有一個有限狀態(tài)集合和一些從一個狀態(tài)通向另一個狀態(tài)的邊,每條邊標記有一個符號,其中一個狀態(tài)是初態(tài),某些狀態(tài)是終態(tài)。不同于不確定的有限自動機,DFA中不會有從同一狀態(tài)出發(fā)的兩條邊標志有相同的符號
    2021-06-06
  • 基于Python制作一個簡單的文章搜索工具

    基于Python制作一個簡單的文章搜索工具

    這篇文章主要為大家詳細介紹了如何基于Python制作一個簡單的文章搜索工具,都是一些基礎(chǔ)的應(yīng)用,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-05-05
  • Python全面解析xml文件

    Python全面解析xml文件

    這篇文章主要介紹了Python全面解析xml文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python單例模式原理與創(chuàng)建方法實例分析

    python單例模式原理與創(chuàng)建方法實例分析

    這篇文章主要介紹了python單例模式原理與創(chuàng)建方法,結(jié)合實例形式分析了Python單例模式的概念、原理、定義、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-10-10
  • Python?對數(shù)字的千分位處理方式

    Python?對數(shù)字的千分位處理方式

    這篇文章主要介紹了Python?對數(shù)字的千分位處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python實現(xiàn)簡單網(wǎng)頁圖片抓取完整代碼實例

    Python實現(xiàn)簡單網(wǎng)頁圖片抓取完整代碼實例

    這篇文章主要介紹了Python實現(xiàn)簡單網(wǎng)頁圖片抓取完整代碼實例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • 基于Python實現(xiàn)打哈欠檢測詳解

    基于Python實現(xiàn)打哈欠檢測詳解

    這篇文章主要介紹了如何利用Python+OpenCV實現(xiàn)人打哈欠檢測,文中的示例代碼講解詳細,對我們學(xué)習(xí)Python有一定幫助,感興趣的可以了解一下
    2022-04-04
  • Python HTMLTestRunner如何下載生成報告

    Python HTMLTestRunner如何下載生成報告

    這篇文章主要介紹了Python HTMLTestRunner如何下載生成報告,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09

最新評論

洪泽县| 鹤峰县| 琼海市| 曲靖市| 军事| 特克斯县| 汾西县| 延津县| 成武县| 成武县| 宁明县| 松阳县| 邯郸市| 巢湖市| 刚察县| 大渡口区| 海宁市| 桂平市| 仁布县| 沂南县| 辽宁省| 金坛市| 马鞍山市| 临澧县| 红河县| 台北县| 岚皋县| 绥德县| 女性| 泰兴市| 长治市| 石泉县| 阳山县| 益阳市| 长子县| 乐都县| 松江区| 化隆| 玉溪市| 古田县| 马尔康县|