Python求兩個list的交集、並集、差(補)集、對稱差集的方法
Python求兩個list的交集、並集、差(補)集、對稱差集的方法
摘要
本文主要介紹在Python下求兩個list的交集、並集、差(補)集、對稱差集的方法。首先,總結了實現上述功能主要的兩種方法:1.使用set集合運算子,2.使用set集合的方法(推薦第2種方法);接著,依次對同一功能的不同種實現方式羅列出具體例子(不限於上述兩種方法)。
1. 總結
1.1 求兩個list的交、並、差(補)、對稱差集 - 使用set集合運算子
輸入:
a = [0,1,2,3,4]
b = [0,2,6]
list(set(a) & set(b)) # 使用 "&" 運算求a與b的交集,輸出:[0, 2]
list(set(a) | set(b)) # 使用 "|" 運算求a與b的並集,輸出:[0, 1, 2, 3, 4, 6]
list(set(b) - set(a)) # 使用 "-" 運算求a與b的差(補)集: 求b中有而a中沒有的元素,輸出:[6]
list(set(a) - set(b)) # 使用 "-" 運算求a與b的差(補)集: 求a中有而b中沒有的元素,輸出:[1, 3, 4]
list(set(a) ^ set(b)) # 使用 "^" 運算求a與b的對稱差集,輸出:[1, 3, 4, 6]
輸出:
求交集: list(set(a) & set(b)) 輸出 -> [0, 2]
求並集: list(set(a) | set(b)) 輸出 -> [0, 1, 2, 3, 4, 6]
求差(補)集: list(set(b) - set(a)) 輸出 -> [6]
求差(補)集: list(set(a) - set(b)) 輸出 -> [1, 3, 4]
求對稱差集: list(set(a) ^ set(b)) 輸出 -> [1, 3, 4, 6]
1.2 求兩個list的交、並、差(補)、對稱差集 - 使用set集合的方法 - 高效率
輸入:
a = [0,1,2,3,4]
b = [0,2,6]
list(set(a).intersection(set(b))) # 使用 intersection 求a與b的交集,輸出:[0, 2]
list(set(a).union(b)) # 使用 union 求a與b的並集,輸出:[0, 1, 2, 3, 4, 6]
list(set(b).difference(set(a))) # 使用 difference 求a與b的差(補)集:求b中有而a中沒有的元素,輸出: [6]
list(set(a).difference(set(b))) # 使用 difference 求a與b的差(補)集:求a中有而b中沒有的元素,輸出:[1, 3, 4]
list(set(a).symmetric_difference(b)) # 使用 symmetric_difference 求a與b的對稱差集,輸出:[1, 3, 4, 6]
輸出:
求交集:list(set(a).intersection(set(b)) 輸出 --> [0, 2]
求並集:list(set(a).union(b)) 輸出 --> [0, 1, 2, 3, 4, 6]
求差(補)集: list(set(b).difference(set(a)) 輸出 --> [6]
求差(補)集: list(set(a).difference(set(b))) 輸出 --> [1, 3, 4]
求對稱差集: list(set(a).symmetric_difference(b)) 輸出 --> [1, 3, 4, 6]
2.求兩list的交集 - 不同實現方式
輸入:
"""以a、b為實驗物件"""
a = [0,1,2,3,4]
b = [0,2,6]
"""方法1:使用 intersection 求a與b的交集"""
c1 = list(set(a).intersection(set(b)))
print('c1 -->', c1) #輸出:c1 --> [0, 2]
"""方法2:在list裡使用迴圈 求a與b的交集 - 不推薦使用"""
c2 = [c_i for c_i in a if c_i in b]
print('c2 -->', c2) #輸出:c2 --> [0, 2]
"""方法3:使用 "&" 運算 求a與b的交集"""
c3 = list(set(a) & set(b))
print('c3 -->', c3) #輸出:c3 --> [0, 2]
"""方法4:使用 append 求a與b的交集 - 不推薦使用"""
c4 = []
for a_i in a:
if a_i in b:
c4.append(a_i)
print('c4 -->', c4) # 輸出:c4 --> [0, 2]
輸出:
c1 --> [0, 2]
c2 --> [0, 2]
c3 --> [0, 2]
c4 --> [0, 2]
3.求兩個list的並集 - 不同實現方式
輸入:
"""以a、b為實驗物件"""
a = [0,1,2,3,4]
b = [0,2,6]
"""方法1:使用 union 求a與b的並集"""
c1 = list(set(a).union(set(b)))
print('c1 -->', c1) # 輸出c1 --> [0, 1, 2, 3, 4, 6]
"""方法2:使用 "|" 求a與b的並集"""
c2 = list(set(a) | set(b))
print('c2 -->', c2) # 輸出c2 --> [0, 1, 2, 3, 4, 6]
"""方法3:使用 append 求a與b的並集 - 不推薦使用"""
import copy
c3 = copy.deepcopy(a)
for b_i in set(b):
if b_i not in set(a):
c3.append(b_i)
print('c3 -->', c3) # 輸出c3 --> [0, 1, 2, 3, 4, 6]
輸出:
c1 --> [0, 1, 2, 3, 4, 6]
c2 --> [0, 1, 2, 3, 4, 6]
c3 --> [0, 1, 2, 3, 4, 6]
4.求兩個list的差(補)集 - 不同實現方式
輸入:
"""以a、b為實驗物件"""
a = [0,1,2,3,4]
b = [0,2,6]
"""方法1:使用 difference 求a與b的差(補)集"""
c1 = list(set(b).difference(set(a))) # 求b中有而a中沒有的元素
c2 = list(set(a).difference(set(b))) # 求a中有而b中沒有的元素
print('c1 -->', c1) # 輸出c1 --> [6]
print('c2 -->', c2) # 輸出c2 --> [1, 3, 4]
"""方法2:使用 "-" 求a與b的差(補)集"""
c3 = list(set(b) - set(a)) # 求b中有而a中沒有的
c4 = list(set(a) - set(b)) # 求a中有而b中沒有的
print('c3 -->', c3) # 輸出c3 --> [6]
print('c4 -->', c4) # 輸出c4 --> [1, 3, 4]
輸出:
c1 --> [6]
c2 --> [1, 3, 4]
c3 --> [6]
c4 --> [1, 3, 4]
5.求兩個list的對稱差集 - 不同實現方式
對稱差集:只屬於其中一個集合,而不屬於另一個集合的元素組成的集合(求不同時屬於兩集合的元素組成的集合)
輸入:
"""以a、b為實驗物件"""
a = [0,1,2,3,4]
b = [0,2,6]
"""方法1:使用 symmetric_difference 求對稱差集"""
c1 = list(set(a).symmetric_difference(set(b))) """c1 與 c2 的結果一樣"""
print('c1 -->', c1) """輸出c1 --> [1, 3, 4, 6]"""
c2 = list(set(b).symmetric_difference(set(a))) """c1 與 c2 的結果一樣"""
print('c2 -->', c2) """輸出c2 --> {1, 3, 4, 6}"""
"""方法2:使用 "^" 求對稱差集"""
c3 = list(set(a) ^ set(b))
print('c3 -->', c3) """輸出c3 --> {1, 3, 4, 6}"""
輸出:
c1 --> [1, 3, 4, 6]
c2 --> [1, 3, 4, 6]
c3 --> [1, 3, 4, 6]
相關文章
- Python求兩個list的差集、交集與並集的方法Python
- Linux求兩個文字檔案的交集、差集、並集Linux
- python-進階教程-對兩個集合/字典求交集、差集、並集Python
- JS求陣列的交集、並集、差集JS陣列
- 利用Underscore求陣列的交集、並集和差集陣列
- NET 集合交集、並集、差集操作
- 【資料集合】並集、交集、差集、子集
- C# 交集、差集、並集、去重C#
- JS實現並集,交集和差集JS
- C# Linq 交集、並集、差集、去重C#
- Linux 對比兩個文字的交集和差集(comm)Linux
- 【轉】 js陣列 Array 交集 並集 差集 去重JS陣列
- sql_intersect交集_minus差集_並集union_union allSQL
- Spark2 Dataset去重、差集、交集Spark
- MySQL實現差集(Minus)和交集(Intersect)MySql
- List和set集合:交集、差集、合集的區別retainAll,removeAll、addAllAIREM
- Python實現求多個集合之間並集的方法Python
- lodash原始碼分析之陣列的差集原始碼陣列
- 【並查集】【帶偏移的並查集】食物鏈並查集
- 並查集(一)並查集的幾種實現並查集
- 用bash命令求兩個集合的交集
- 補題集
- 並查集的使用並查集
- 並查集到帶權並查集並查集
- Codeforces2020D Connect the Dots(觀察 + 並查集 + 差分)並查集
- 轉載:一個python並查集類Python並查集
- 比對兩個資料庫的差異:Java篇資料庫Java
- 並查集的應用並查集
- 並查集(二)並查集的演算法應用案例上並查集演算法
- 【京東】商品list列表採集+類目下的商品列表資料採集
- 如何檢視Oracle RAC叢集的叢集名稱(CLUSTER NAME)Oracle
- 線上json差異比較工具--遞迴比較兩個json的節點和值的差異,並支援差異數預覽和逐個檢視差異JSON遞迴
- 兩個時間戳的時間差時間戳
- 並查集(小白)並查集
- 3.1並查集並查集
- 並查集的應用2並查集
- (轉載)並查集的作用並查集
- 針對Fluent-Bit採集容器日誌的補充