python快速提取兩個列表中的相同元素

今天想比較一下list和str兩個類有哪些共同函數。我知道可以通過dir(list)和dir(str)得到這兩個類中函數的列表,於是接下來的問題就是怎樣得到兩個列表中的共同元素。

開始想到的是用兩個for循環並通過in來查找。但考慮到嵌套for循環實現這個功能比較麻煩,於是繼續考慮其他方法。

想起之前見過一個用字典結構統計單詞個數的栗子,於是想到用字典對兩個列表中的元素進行計數({elem: count}),如果同一個元素出現了兩次,那麼該元素就是共同元素。如果通過個數判斷,首先需要對列表中的元素去重,可惜列表好像沒有直接去重的方法,這時自然想到了集合。通過set(list)方法很容易得到沒有重複元素的集合。想到集合就想到了集合中的方法intersection(),該方法用於求兩個集合的交集,也就是兩個集合的共同元素,到這裏,貌似可以把使用字典結構的思路踢到一邊去了。於是,反推一下,很容易得到求兩個列表共同元素的方法。

具體代碼如下:

#! python
#這個函數用於提取兩個列表的共同元素
def extra_same_elem(list1, list2):
    set1 = set(list1)
    set2 = set(list2)
    iset = set1.intersection(set2)
    return list(iset)

lst1 = dir(list)
lst2 = dir(str)
lst = extra_same_elem(lst1, lst2)
lst.sort() #對結果排一下序,方便查看
print(lst)

運行結果如下圖所示:

可以看到除了系統定義的變量外,list和str只有兩個共同的方法,分別是count和index。

按照這個思路,提取多個列表共同元素的方法也很簡單,例如list, str, tuple, dict, set的共同方法有哪些(答案是沒有!)。

對以上方法進行改進,用於提取多個列表的共同元素:

#! python
#這個函數用於提取多個列表的共同元素
def extra_same_elem(lst, *lsts):
    iset = set(lst)
    for li in lsts:
        s = set(li)
        iset = iset.intersection(s)
    return list(iset)

lst1 = dir(list)
lst2 = dir(set)
lst3 = dir(dict)
lst4 = dir(set)
#lst5 = dir(str)
lst = extra_same_elem(lst1, lst2, lst3, lst4)
lst.sort()#對結果排一下序,方便查看
print(lst)

 

如果你有更簡單的方法,而且也樂於分享,可以在下方評論區寫上。謝謝。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章