1. 程式人生 > 程式設計 >Python集合操作方法詳解

Python集合操作方法詳解

集合是無序的,天生不重複的資料組合,它的作用如下:

  • 去重,即:把一個列表變成集合,就去重了
  • 關係測試,即:測試兩組集合的交集、並集和差集等

一、集合常用方法總結

Python集合操作方法詳解

二、定義

1、語法

>>> name_1 = [1,2,3,4,7,8,10]
#把列表轉換為集合
>>> name_1 = set(name_1)
#轉換後,去重
>>> print(name_1,type(name_1))
{1,10} <class 'set'>

 三、關係測試

1、交集(intersection())

>>> name_1 = [1,10]
>>> name_2 = [1,5,10]
>>> name_1 = set(name_1)
>>> name_2 = set(name_2)
#輸出結果
>>> name_1.intersection(name_2)
{8,1,10,3}

2、並集(union())

>>> name_1 = [1,10]
>>> name_1 = set(name_1)
>>> name_2 = set(name_2)
#輸出結果
>>> name_1.union(name_2)
{1,10}

 3、差集(difference())

>>> name_1 = [1,10]
>>> name_1 = set(name_1)
>>> name_2 = set(name_2)
#輸出結果
>>> name_1.difference(name_2)
{2,7}

 特別提示:差集取的是數值在第一個集合中,但是不在第二個集合中(在我不在你)

4、issubset()

判斷一個集合是否是另一個集合的子集

>>> name_1 = [1,10]
>>> name_3 = [1,4]
>>> name_1 = set(name_1)
>>> name_3 = set(name_3)
#輸出結果
>>> name_3.issubset(name_1)
True

 5、issuperset()

判斷一個集合是否是另一個集合的父集

>>> name_1 = [1,4]
>>> name_1 = set(name_1)
>>> name_3 = set(name_3)
#輸出結果
>>> name_1.issuperset(name_3)
True

 6、對稱差集(symmetric_difference())

 把兩個集合沒有交集的數值取出來

>>> name_1 = [1,10]
>>> name_1 = set(name_1)
>>> name_2 = set(name_2)
#輸出結果
>>> name_1.symmetric_difference(name_2)
{2,7}

 7、isdisjoint()

判斷兩個集合是否有交集,沒有交集,則返回True

>>> name_1 = [1,10]
>>> name_3 = [11]
>>> name_1 = set(name_1)
>>> name_2 = set(name_2)
>>> name_3 = set(name_3)
#有交集
>>> name_1.isdisjoint(name_2)
False
#無交集
>>> name_1.isdisjoint(name_3)
True

 四、關係測試(特殊符號)

1、交集(&)

>>> name_1 = [1,10]
>>> name_1 = set(name_1)
>>> name_2 = set(name_2)
#結果輸出
>>> name_1 & name_2
{8,3}

2、並集(|)

>>> name_1 = [1,10]
>>> name_1 = set(name_1)
>>> name_2 = set(name_2)
#結果輸出
>>> name_1 | name_2
{1,10}

 3、差集(-)

>>> name_1 = [1,10]
>>> name_1 = set(name_1)
>>> name_2 = set(name_2)
#結果輸出
>>> name_1 - name_2
{2,7}

4、對稱差集(^)

>>> name_1 = [1,10]
>>> name_1 = set(name_1)
>>> name_2 = set(name_2)
#輸出
>>> name_1 ^ name_2
{2,7}

5、是否是子集(<=)

>>> name_1 = [1,4]
>>> name_1 = set(name_1)
>>> name_3 = set(name_3)
#輸出
>>> name_3 <= name_1
True

6、是否是父集(>=)

>>> name_1 = [1,4]
>>> name_1 = set(name_1)
>>> name_3 = set(name_3)
#輸出
>>> name_1 >= name_3
True

 五、基本操作

1、新增(add())

>>> name_2 = [1,10]
>>> name_2 = set(name_2)
#新增已存在,不報錯
>>> name_2.add(1)
>>> name_2
{8,5}
#新增不存在,新增一個新的數值
>>> name_2.add(11)
>>> name_2
{1,11}

 2、新增多項(update())

>>> name_2 = [1,10]
>>> name_2 = set(name_2)
>>> name_2.update([12,13,14])
#輸出結果
>>> name_2
{1,12,14}

 3、刪除(remove(),pop(),discard())

①remove()

>>> name_2 = [1,10]
>>> name_2 = set(name_2)
>>> name_2
{8,5}
>>> name_2.remove(1)
#輸出
>>> name_2
{8,5}
#刪除不存在的元素,會報錯
>>> name_2.remove(1)
Traceback (most recent call last):
 File "<input>",line 1,in <module>
KeyError: 1

 特別提示:用remove刪除時,當元素不存在,會報錯

②pop()

>>> name_2 = [1,5}
#輸出
>>> name_2.pop()
8

 特別提示:pop是隨機刪除集合中的某個元素,並且列印

③discard()

>>> name_2 = [1,10]
>>> name_2 = set(name_2)
>>> name_2.discard(10)
#輸出結果
>>> name_2
{8,5}
#刪除不存在元素,不報錯
>>> name_2.discard(10)

特別提示:用discard刪除不存在的元素,不會出現報錯

4、長度(len())

>>> name_1 = [1,10]
>>> name_1 = set(name_1)
#結果輸出
>>> len(name_1)
7

 5、x in s

測試 x 是否是 s 的成員

>>> name_1 = [1,10]
>>> name_1 = set(name_1)
#結果輸出
>>> 1 in name_1
True

 6、x not in s

測試 x 是否不是 s 的成員

>>> name_1 = [1,10]
>>> name_1 = set(name_1)
#輸出
>>> 12 not in name_1
True

更多關於Python集合操作方法可檢視下面的相關連結