python中如何對list之間求交集,並集和差集


最近遇到一個從list a里面去除list b的元素的問題,由於a很大,b也不小。所以遇到點困難,現在mark一下。

先說最簡單的方法:

1 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2 b = [2, 5, 8, 11, 0]
3 # intersection
4 intersection = [v for v in a if v in b]
5 # union
6 union = b.extend([v for v in a])
7 # difference
8 difference = [v for v in a if v not in b]

這種方法就是邏輯->代碼,沒有深層次的考慮。當然這里所有的代碼沒有用到for loop,也沒有使用list的append和remove方法,因為這樣寫很pythonic,效率上來看個人感覺比append和remove的使用應該也會高。但是這種方法是不加思考的。其實計算兩個list的交並補之類的操作,其實是集合間的操作,如果list里面有重復元素再進行這樣的操作其實沒有什么意義。所以從集合的操作角度來講,交並補可以借鑒bitset的處理方法。當list的長度很大的時候,效率會高出很多倍。

高效率的方法:

1 # intersection
2 intersection = list(set(a).intersection(set(b)))
3 # union
4 union = list(set(a).union(set(b)))
5 # difference
6 difference = list(set(a).difference(set(b)))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM