4.6 集合(set)
集合是由不重復元素組成的無序容器,集合中的元素不能重復,即使向集合中再添加同樣的元素,也只會保留一個,由于集合的這種特性,所以一般可以用集合進行去重,
集合中不能添加可變物件(不可哈希),因為無法判斷兩個可變物件是否相同,也就無法保證集合的內部不會有重復元素,
集合中的元素是無序的,我們通過print可以顯示集合內的元素,但是顯示的結果并非是集合中的元素的順序,這意味著集合不能通過索引或切片獲取內部的元素,
4.6.1 集合的創建
4.6.1.1 通過集合識別符號號創建
串列在創建的時候用{}做標識,內部的元素用逗號進行分隔,
>>> st = {1} # 僅一個元素的集合
>>> st2 = {'a', 'b', 'c'} # 集合中存放的全是字符
>>> st3 = {1, 'a', '中'} # 集合中存放混合資料
>>> st4 = {'red', 'green', 'blue'} # 集合中存放的全是字串
4.6.1.2 通過集合推導式創建
>>> {x for x in range(5)}
{0, 1, 2, 3, 4}
>>> {x * x for x in range(10)}
{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
>>> {x*x for x in range(10) if x % 3 == 0}
{0, 9, 36, 81}
4.6.1.3 通過set函式創建
set函式可以將一個可迭代物件轉換成集合,如果可迭代物件中有重復的元素則會自動去除保留一個,
>>> print(set('Pythonn')) # 只會保留一個n
{'P', 'y', 't', 'h', 'o', 'n'}
>>> set() # 創建空的集合
{}
注意:不能通過st = {}創建空集合,因為這樣會創建空的字典,
4.6.1.4 通過frozenset函式創建
set函式可以創建一個普通的集合(可以修改),但是通過frozenset函式創建的集合是一個不可修改的集合,創建后就不能再修改里面的元素,包括增加、洗掉、清空等,
>>> st = frozenset('python')
>>> st
frozenset({'o', 't', 'p', 'h', 'y', 'n'})
>>> st.add('l')
Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
AttributeError: 'frozenset' object has no attribute 'add'
4.6.2 集合的訪問
4.6.2.1 遍歷集合
參見可迭代物件章節中的可迭代物件的遍歷
4.6.2.2 成員資格檢查
參見可迭代物件中的成員資格檢查
4.6.3 集合的運算
4.6.3.1 并集(回傳兩個集合所有的元素的集合)
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 | st2
{1, 2, 3, 4, 5, 6, 8, 10}
4.6.3.2 交集(回傳兩個集合都有的元素的集合)
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 & st2
{2, 4}
4.6.3.3 差集(回傳前者集合有而后者沒有的元素的集合)
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 - st2
{1, 3, 5}
4.6.3.4 對稱差(回傳不同時在2個集合中的元素的集合)
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 - st2
{1, 3, 5, 6, 8, 10}
4.6.4 集合的關系
A < B # 回傳A是否是B的子集(同:A.issubset(B))
A > B # 回傳A是否是B的超集(同:A.issuperset(B))
4.6.5 集合的方法
4.6.5.1 添加元素
4.6.5.1.1 add(x)
描述
為集合添加元素
示例
>>> st = {1, 2}
>>> st.add(3)
>>> st
{1, 2, 3}
4.6.5.1.2 update(x)
描述
添加新的元素或集合到當前集合中,
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.update(st2)
>>> st1
{1, 2, 3, 4, 5, 6, 8, 10}
4.6.5.2 洗掉元素
4.6.5.2.1 remove(x)
描述
指定洗掉集合中的元素,要洗掉的元素必須在目標集合中存在,否則引發KeyError例外,
示例
>>> st1 = {1, 2, 3}
>>> st1.remove(2)
>>> st1
{1, 3}
4.6.5.2.2 discard()
描述
洗掉集合中指定的元素,如果要洗掉的元素不在目標集合中則不起任何作用,
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st1.discard(2)
>>> st1
{1, 3, 4, 5}
4.6.5.2.3 pop()
描述
隨機洗掉集合中的一個元素
示例
>>> st1 = {1, 2, 3}
>>> st1.pop()
1
>>> st1
{2, 3}
4.6.5.2.4 clear()
描述
移除集合中的所有元素
示例
>>> st = {1, 2}
>>> st.clear()
>>> st
{}
4.6.5.3 查詢統計類
4.6.5.3.1 union(x)
描述
回傳兩個集合的并集,
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.union(st2)
{1, 2, 3, 4, 5, 6, 8, 10}
4.6.5.3.2 intersection()、intersection_update()
描述
回傳多個集合的交集,intersection不修改原物件內容,直接回傳結果,而intersection_update會修改原物件內容,
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.intersection(st2)
{2, 4}
4.6.5.3.3 difference()、difference_update()
描述
回傳多個集合的差集,difference不修改原物件內容,直接回傳結果,而difference_update會修改原物件內容,
示例
>>> st1 = {1, 2, 3}
>>> st2 = {2, 4, 6}
>>> st1.difference(st2)
{1, 3}
4.6.5.3.4 symmetric_difference()、symmetric_difference_update()
描述
回傳兩個集合中不重復的元素的集合(對稱差),symmetric_difference不修改原物件內容,直接回傳結果,而symmetric_difference_update會修改原物件內容,
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.symmetric_difference(st2)
{1, 3, 5, 6, 8, 10}
4.6.5.3.5 issubset()、issuperset()
描述
判斷前者集合是否是后者集合的子集(超集),如果為真,則回傳True,否則回傳False,
示例
>>> st1 = {1, 2}
>>> st2 = {1, 2, 4}
>>> st1.issubset(st2)
True
4.6.5.3.6 isdisjoint()
描述
判斷兩個集合是否不相交(即不含有相同元素),如果不相交則回傳True,否則回傳False,
示例
>>> st1 = {1, 2}
>>> st2 = {2, 4}
>>> st3 = {3, 6}
>>> st1.isdisjoint(st2)
>>> st1.isdisjoint(st3)
False
True
4.6.5.4 其它類
4.6.5.4.1 copy()
描述
拷貝一個集合
示例
>>> st = {1, 2, 3}
>>> st2 = st.copy()
>>> st2
從自動化辦公到智能化辦公{1, 2, 3}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/501898.html
標籤:其他
上一篇:day21--Java集合04
