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