python對(duì)兩個(gè)列表求交集的三種實(shí)現(xiàn)方法
在Python中,你可以使用多種方法來(lái)計(jì)算兩個(gè)列表的交集。以下是幾種常見(jiàn)的方法:
方法1:使用集合(Set)
集合是Python中用于存儲(chǔ)唯一元素的數(shù)據(jù)結(jié)構(gòu),它提供了許多有用的方法,包括計(jì)算交集。
list1 = [1, 2, 3, 4, 5] list2 = [4, 5, 6, 7, 8] # 將列表轉(zhuǎn)換為集合 set1 = set(list1) set2 = set(list2) # 計(jì)算交集 intersection = set1.intersection(set2) # 如果需要,可以將結(jié)果轉(zhuǎn)換回列表 intersection_list = list(intersection) print(intersection_list) # 輸出: [4, 5]
方法2:使用列表推導(dǎo)式(List Comprehension)
如果你不想使用集合,或者想要保持結(jié)果為列表格式,你可以使用列表推導(dǎo)式來(lái)找出兩個(gè)列表的交集。
list1 = [1, 2, 3, 4, 5] list2 = [4, 5, 6, 7, 8] # 使用列表推導(dǎo)式計(jì)算交集 intersection_list = [value for value in list1 if value in list2] print(intersection_list) # 輸出: [4, 5]
方法3:使用itertools.filterfalse(對(duì)于較大列表可能效率不高)
雖然這種方法不如前兩種常用,但它展示了如何使用itertools
模塊中的filterfalse
函數(shù)來(lái)計(jì)算交集(盡管在這種情況下,使用filter
或簡(jiǎn)單的列表推導(dǎo)式可能更為直接和高效)。
import itertools list1 = [1, 2, 3, 4, 5] list2 = [4, 5, 6, 7, 8] # 轉(zhuǎn)換為集合以提高查找效率(否則這個(gè)方法的效率會(huì)很低) set2 = set(list2) # 使用itertools.filterfalse過(guò)濾掉不在set2中的元素 intersection_list = list(itertools.filterfalse(lambda x: x not in set2, list1)) # 但注意,這只會(huì)給出list1和list2的交集部分在list1中出現(xiàn)的元素。 # 要得到完整的交集(不考慮順序),應(yīng)該使用: # intersection_list = list(set(list1) & set(list2)) # 這實(shí)際上與方法1相同 # 由于我們之前已經(jīng)轉(zhuǎn)換為集合,這里我們直接使用方法1的結(jié)果作為示例 # 實(shí)際上,對(duì)于這種方法,我們不會(huì)這樣使用,因?yàn)樗什桓咔胰唛L(zhǎng) # 假設(shè)我們只是想要展示如何使用filterfalse(雖然這不是最佳實(shí)踐) # 并且我們知道list1中的元素在list2中也可能有重復(fù),我們想要保留這些重復(fù)(盡管題目沒(méi)要求) # 那么我們需要稍微改變策略,但這通常不是計(jì)算交集的標(biāo)準(zhǔn)方法 # ...(此處省略了非標(biāo)準(zhǔn)方法的詳細(xì)實(shí)現(xiàn),因?yàn)樗贿m用于此場(chǎng)景) # 正確且效率更高的做法還是使用方法1或方法2 print(intersection_list) # 如果使用正確的方法,輸出應(yīng)該是 [4, 5]
注意:在方法3中,我展示了如何使用itertools.filterfalse
,但指出了這種方法通常不是計(jì)算交集的最佳選擇,特別是當(dāng)列表較大時(shí)。在實(shí)際應(yīng)用中,你應(yīng)該使用方法1(使用集合)或方法2(使用列表推導(dǎo)式),因?yàn)樗鼈兗群?jiǎn)單又高效。
到此這篇關(guān)于python對(duì)兩個(gè)列表求交集的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)python 列表交集內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)據(jù)類(lèi)型詳解(三)元祖:tuple
本文給大家介紹的是Python數(shù)據(jù)類(lèi)型中的元祖(tuple),簡(jiǎn)單的說(shuō)Tuple,與列表一樣,元素也是不可變的,但與列表不同,在一個(gè)元祖可以包含不同類(lèi)型的元素2016-05-05Python opencv相機(jī)標(biāo)定實(shí)現(xiàn)原理及步驟詳解
這篇文章主要介紹了Python opencv相機(jī)標(biāo)定實(shí)現(xiàn)原理及步驟詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04python ImageDraw類(lèi)實(shí)現(xiàn)幾何圖形的繪制與文字的繪制
這篇文章主要介紹了python ImageDraw類(lèi)實(shí)現(xiàn)幾何圖形的繪制與文字的繪制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Python實(shí)現(xiàn)局域網(wǎng)遠(yuǎn)程控制電腦
這篇文章主要為大家詳細(xì)介紹了如何利用Python編寫(xiě)一個(gè)工具,可以實(shí)現(xiàn)遠(yuǎn)程控制局域網(wǎng)電腦關(guān)機(jī),重啟,注銷(xiāo)等功能,感興趣的小伙伴可以參考一下2024-12-12python的getattr和getattribute攔截內(nèi)置操作實(shí)現(xiàn)
在Python中,getattr和getattribute是用于動(dòng)態(tài)屬性訪問(wèn)和自定義屬性訪問(wèn)行為的重要工具,本文主要介紹了python的getattr和getattribute攔截內(nèi)置操作實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5滑塊條控件QSlider詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5滑塊條控件QSlider詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-02-02Python+PyQt5實(shí)現(xiàn)數(shù)據(jù)庫(kù)表格動(dòng)態(tài)增刪改
這篇文章主要為大家介紹如何利用Python中的PyQt5模塊實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表格的動(dòng)態(tài)增刪改,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-03-03python接口自動(dòng)化之使用token傳入到header消息頭中
這篇文章主要介紹了python接口自動(dòng)化之使用token傳入到header消息頭中問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08python模塊與C和C++動(dòng)態(tài)庫(kù)相互調(diào)用實(shí)現(xiàn)過(guò)程示例
這篇文章主要為大家介紹了python模塊與C和C++動(dòng)態(tài)庫(kù)之間相互調(diào)用的實(shí)現(xiàn)過(guò)程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11