要去除 Python 列表中的重復(fù)元素,1. 使用 set():適用于元素為不可變類型且不關(guān)心順序的情況,語(yǔ)法為 list(set(original_list)),但會(huì)打亂原始順序;2. 使用 dict.fromkeys():推薦方法,適用于 Python 3.7 ,可保持元素首次出現(xiàn)的順序,語(yǔ)法為 list(dict.fromkeys(original_list)),代碼簡(jiǎn)潔且高效;3. 使用列表推導(dǎo)配合 seen 集合:適用于需自定義去重邏輯的場(chǎng)景,通過(guò)遍歷列表并用集合記錄已見(jiàn)元素,確保唯一性;4. 處理不可哈希類型如字典時(shí),可基于特定鍵(如 'id')進(jìn)行去重,手動(dòng)遍歷并利用 seen 集合判斷,確保該鍵值未重復(fù)添加。總結(jié):一般情況推薦使用 dict.fromkeys() 保持順序,若無(wú)需順序可使用 set(),復(fù)雜結(jié)構(gòu)則采用手動(dòng)遍歷加 seen 集合的方式完成去重。
要去除 Python 列表中的重復(fù)元素,有多種方法,下面介紹幾種常見(jiàn)且實(shí)用的示例。

1. 使用 set()
(最簡(jiǎn)單,但不保持順序)
如果列表中的元素都是不可變類型(如整數(shù)、字符串、元組),并且你不關(guān)心元素順序,可以直接轉(zhuǎn)為集合再轉(zhuǎn)回列表:
original_list = [1, 2, 2, 3, 4, 4, 5] unique_list = list(set(original_list)) print(unique_list) # 輸出可能為 [1, 2, 3, 4, 5](順序可能變化)
?? 注意:
set
會(huì)打亂原始順序,因?yàn)榧鲜菬o(wú)序的。
2. 使用 dict.fromkeys()
(推薦,保持順序)
這是保持元素首次出現(xiàn)順序的最簡(jiǎn)潔方法,適用于 Python 3.7 (因?yàn)樽值鋸?3.7 開(kāi)始保證插入順序):
original_list = [1, 2, 2, 3, 4, 4, 5] unique_list = list(dict.fromkeys(original_list)) print(unique_list) # 輸出: [1, 2, 3, 4, 5]
? 優(yōu)點(diǎn):代碼簡(jiǎn)潔,保持順序,速度快。

3. 使用列表推導(dǎo) seen
集合(自定義邏輯,適合復(fù)雜場(chǎng)景)
如果你想更靈活地控制去重邏輯(比如處理字典列表),可以用一個(gè)輔助集合記錄已見(jiàn)過(guò)的元素:
original_list = [1, 2, 2, 3, 4, 4, 5] seen = set() unique_list = [] for item in original_list: if item not in seen: seen.add(item) unique_list.append(item) print(unique_list) # 輸出: [1, 2, 3, 4, 5]
這種方法適合需要自定義“判斷重復(fù)”邏輯的場(chǎng)景。
4. 去除列表中字典等不可哈希類型的重復(fù)項(xiàng)
如果列表中是字典或列表這類不可哈希類型,不能直接用 set
或 dict.fromkeys()
。可以基于某個(gè)鍵去重:
data = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 1, 'name': 'Alice'}, # 重復(fù) ] seen = set() unique_data = [] for item in data: key = item['id'] # 以 id 為唯一標(biāo)識(shí) if key not in seen: seen.add(key) unique_data.append(item) print(unique_data) # 輸出: [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
總結(jié):推薦用法
- 一般情況(元素可哈希,要保持順序)? 用
list(dict.fromkeys(lst))
- 不在乎順序,追求速度 ? 用
list(set(lst))
- 復(fù)雜結(jié)構(gòu)(如字典)? 手動(dòng)遍歷
seen
集合
基本上就這些,不復(fù)雜但容易忽略順序問(wèn)題。
以上是python從列表示例中刪除重復(fù)項(xiàng)的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)代碼編輯軟件(SublimeText3)

settings.json文件位于用戶級(jí)或工作區(qū)級(jí)路徑,用于自定義VSCode設(shè)置。1.用戶級(jí)路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級(jí)路徑:項(xiàng)目根目錄下的.vscode/settings

要正確處理JDBC事務(wù),必須先關(guān)閉自動(dòng)提交模式,再執(zhí)行多個(gè)操作,最后根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開(kāi)始事務(wù);2.執(zhí)行多個(gè)SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時(shí)應(yīng)使用try-with-resources管理資源,妥善處理異常并關(guān)閉連接,避免連接泄漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,并保持事務(wù)盡可能短以提升性能。

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

itertools.combinations用于生成從可迭代對(duì)象中選取指定數(shù)量元素的所有不重復(fù)組合(順序無(wú)關(guān)),其用法包括:1.從列表中選2個(gè)元素組合,如('A','B')、('A','C')等,避免重復(fù)順序;2.對(duì)字符串取3個(gè)字符組合,如"abc"、"abd",適用于子序列生成;3.求兩數(shù)之和等于目標(biāo)值的組合,如1 5=6,簡(jiǎn)化雙重循環(huán)邏輯;組合與排列的區(qū)別在于順序是否重要,combinations視AB與BA為相同,而permutations視為不同;

java.lang.OutOfMemoryError:Javaheapspace表示堆內(nèi)存不足,需檢查大對(duì)象處理、內(nèi)存泄漏及堆設(shè)置,通過(guò)堆轉(zhuǎn)儲(chǔ)分析工具定位并優(yōu)化代碼;2.Metaspace錯(cuò)誤因類元數(shù)據(jù)過(guò)多,常見(jiàn)于動(dòng)態(tài)類生成或熱部署,應(yīng)限制MaxMetaspaceSize并優(yōu)化類加載;3.Unabletocreatenewnativethread因系統(tǒng)線程資源耗盡,需檢查線程數(shù)限制、使用線程池、調(diào)整棧大小;4.GCoverheadlimitexceeded指GC頻繁但回收少,應(yīng)分析GC日志,優(yōu)化

fixture是用于為測(cè)試提供預(yù)設(shè)環(huán)境或數(shù)據(jù)的函數(shù),1.使用@pytest.fixture裝飾器定義fixture;2.在測(cè)試函數(shù)中以參數(shù)形式注入fixture;3.yield之前執(zhí)行setup,之后執(zhí)行teardown;4.通過(guò)scope參數(shù)控制作用域,如function、module等;5.將共用fixture放在conftest.py中實(shí)現(xiàn)跨文件共享,從而提升測(cè)試的可維護(hù)性和復(fù)用性。

Python是實(shí)現(xiàn)ETL流程的高效工具,1.數(shù)據(jù)抽取:通過(guò)pandas、sqlalchemy、requests等庫(kù)可從數(shù)據(jù)庫(kù)、API、文件等來(lái)源提取數(shù)據(jù);2.數(shù)據(jù)轉(zhuǎn)換:使用pandas進(jìn)行清洗、類型轉(zhuǎn)換、關(guān)聯(lián)、聚合等操作,確保數(shù)據(jù)質(zhì)量并優(yōu)化性能;3.數(shù)據(jù)加載:利用pandas的to_sql方法或云平臺(tái)SDK將數(shù)據(jù)寫(xiě)入目標(biāo)系統(tǒng),注意寫(xiě)入方式與批次處理;4.工具推薦:Airflow、Dagster、Prefect用于流程調(diào)度與管理,結(jié)合日志報(bào)警與虛擬環(huán)境提升穩(wěn)定性與可維護(hù)性。

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa
