1. 程式人生 > >Python小知識-序列資料結構之集合set(四)

Python小知識-序列資料結構之集合set(四)

這篇文章講的是Python的集合set型別

set集合簡介

集合是一個無序的(類似無序的還有字典),不重複的資料集合。其基本功能包括下面兩種:

  • 去重:把一個還有重複元素的列表或元組等資料型別轉變成集合,其中的重複元素只出現一次。使用set()方法。
  • 進行關係測試:測試兩組資料之間的交集,差集,並集等資料關係。

1. 建立集合set——去重

可以使用大括號{}或者set()函式建立集合。注意:建立一個空集合必須用set()而不是{ },因為{ }是用來建立一個空字典

student ={ 'Jack', 'Jim', 'Mary', 'Tom'
, 'Tom', 'Rose'} print( student) #輸出集合,重複的元素被自動去掉

以上例項輸出結果為:

{ 'Jack', 'Rose', 'Mary', 'Jim', 'Tom'}

2.集合運算

2.1 交集

兩個集合 A 和 B 的交集是含有所有既屬於 A 又屬於 B 的元素,而沒有其他元素的集合。使用 & 操作符執行交集操作,也可使用方法 intersection()

a = set('12345')
b = set('45678')
print(a&b)
print(a.intersection(b))

結果:

{‘4’, ‘5’}
{‘4’, ‘5’}

2.2 差集

A 與 B 的差集是所有屬於 A 且不屬於 B 的元素構成的集合。使用操作符 - 執行差集操作,同樣地,也可使用方法 difference() 完成。

a = set('12345')
b = set('45678')
print(a-b)
print(a.difference(b))

結果:

{‘2’, ‘3’, ‘1’}
{‘2’, ‘3’, ‘1’}

2.3 並集

一組集合的並集是這些集合的所有元素構成的集合,而不包含其他元素。使用操作符 | 執行並集操作,同樣地,也可使用方法 union() 完成。

a = set(
'12345') b = set('45678') print(a|b) print(a.union(b))

結果:

{‘8’, ‘7’, ‘3’, ‘5’, ‘2’, ‘1’, ‘4’, ‘6’}
{‘8’, ‘7’, ‘3’, ‘5’, ‘2’, ‘1’, ‘4’, ‘6’}

2.4對差集

兩個集合的對稱差是隻屬於其中一個集合,而不屬於另一個集合的元素組成的集合。使用 ^ 操作符執行差集操作,同樣地,也可使用方法 symmetric_difference() 完成。

a = set('12345')
b = set('45678')
print(a^b)
print(a.symmetric_difference(b))

結果:

{‘2’, ‘8’, ‘1’, ‘3’, ‘7’, ‘6’}
{‘2’, ‘8’, ‘1’, ‘3’, ‘7’, ‘6’}

3. 集合內建函式和方法

函式 描述
all() 內建函式:如果集合中的所有元素都是 True(或者集合為空),則返回 True。
any() 內建函式:如果集合中的所有元素都是 True,則返回 True;如果集合為空,則返回 False。
enumerate() 內建函式:返回一個列舉物件,其中包含了集合中所有元素的索引和值(配對)。
len() 內建函式:返回集合的長度(元素個數)
max() 內建函式:返回集合中的最大項
min() 內建函式:返回集合中的最小項
sorted() 內建函式:從集合中的元素返回新的排序列表(不排序集合本身)
sum() 內建函式:返回集合的所有元素之和
add() 向集合中新增元素
clear 清空集合
pop 刪除並返回任意的集合元素(如果集合為空,會引發 KeyError)
remove 刪除並返回任意的集合元素(如果集合為空,會引發 KeyError)
intersection 將兩個集合的交集作為一個新集合返回
union 將集合的並集作為一個新集合返回
difference 將兩個或多個集合的差集作為一個新集合返回
symmetric_difference 將兩個集合的對稱差作為一個新集合返回(兩個集合合併刪除相同部分,其餘保留)
update 用自己和另一個的並集來更新這個集合
isdisjoint() 如果兩個集合有一個空交集,返回 True
issubset() 如果另一個集合包含這個集合,返回 True
issuperset() 如果這個集合包含另一個集合,返回 True