(13)基本對象類型--集合

1. 基本對象類型(python里面一切皆是對象)

(接前文)


1.8 集合(set)

1.8.1 集合的定義

? 集合(set)是一個無序的(即沒有索引)不重復(會自動去重)元素序列。

? 可以使用大括號 { } 或者 set() 函數創建集合。

? 集合的元素必須是不可變的,也就是說字典、列表等不能作為集合的元素,字符串、數值、元組可以。

注意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典。建議創建集合都用set方法。

創建格式:

set_name = set(值序列) 或 set_name = {value01,value02,...},值序列可以是字符串、列表等

? 示例:字符串作為元素

>>> s1 = set('good')

>>> s1

輸出:{'d', 'g', 'o'}

注意:1)set創建集合時字符串中每個字符當做一個元素;2)輸出的元素是無序的;3)重復的元素會剔除;

>>> s1 = {'good'}

>>> s1

輸出:{'good'} #注意和set(‘good’)的區別。

? 示例:列表/元組作為元素

>>> citys = set(['beijing','shanghai','guangzhou'])

>>> citys

{'shanghai', 'beijing', 'guangzhou'}

示例:字典作為元素(將字典的鍵作為元素)

>>> s1 = set({'zhao':18,'qian':20,'sun':17})

>>> s1

{'zhao', 'qian', 'sun'}

? 示例:集合元素不能為可變數據類型

>>> s1 = set([1,2,[3,4]])? #元素為可變的列表[3,4],報錯。

Traceback (most recent call last):

? File "<pyshell>", line 1, in <module>

TypeError: unhashable type: 'list'


1.8.2 集合相關方法

1.8.2.1 add方法 集合中添加一個元素

將元素 x 添加到集合 s 中,如果元素已存在,則不進行任何操作。

格式:s.add(x)。? 示例:

>>> citys = set(['beijing','shanghai','guangzhou'])

>>> citys

{'shanghai', 'beijing', 'guangzhou'}

>>> citys.add('shenzheng')

>>> citys

{'shanghai', 'beijing', 'shenzheng', 'guangzhou'}


1.8.2.2 update 參數以列表,元組,字典等形式添加元素

格式:s.update( x ), x可以是字符串、列表、元組、字典等,可以有多個,用逗號分開。

若是字典,則是將字典的key作為元素添加到集合中。

示例:同時將字符串、列表、元組、字典作為參數,將里面的元素添加到s1中

>>> s1 = {'a','b','c'}

>>> s1.update('de',['f','g'],('h','i'),{'j':'Jack','k':'Kim'})

>>> s1

{'d', 'h', 'e', 'j', 'a', 'g', 'k', 'c', 'f', 'i', 'b'}? #注意是無序的


1.8.2.3 remove() 、discard( )和pop() 從集合中移除某個元素

格式:s.remove( x ),將元素 x 從集合 s 中移除,如果元素不存在,則會發生錯誤。

? s.discard( x ),將元素 x 從集合 s 中移除,如果元素不存在,不會發生錯誤。

s.pop(),? 隨機刪除集合中的元素。先對集合進行無序排列,然后刪除第一個元素并返回被刪除的元素。

示例:

>>> s1 = set('abcd')

>>> s1

{'b', 'a', 'c', 'd'}

>>> s1.remove('b')

>>> s1

{'a', 'c', 'd'}

>>> s1.discard('c')

>>> s1

{'a', 'd'}

>>> s1.pop()

'd'

>>> s1.discard('d')? #不存在的元素,不會發生錯誤,相當于沒有做移除操作。

>>> s1.remove('d') #不存在的元素,發生錯誤

Traceback (most recent call last):

? File "<pyshell>", line 1, in <module>

KeyError: 'd'


1.8.2.4 clear()

格式: s.clear(),清空集合 s。

示例:

>>> s1 = set('abc')

>>> s1.clear()

>>> s1


1.8.2.5 x in s 判斷元素 x 是否在集合 s 中

判斷元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。

示例:

>>> s1 = set('abc')

>>> 'a' in s1

True

>>> 'd' in s1

False

>>> 'a' not in s1

False

>>> 'd' not in s1

True


1.8.2.6 copy() 集合復制

>>> s1 = set('abc')

>>> s1

{'b', 'a', 'c'}

>>> s2 = s1.copy()

>>> s2

{'b', 'a', 'c'}


1.8.2.7 difference() 方法用于返回集合的差集

返回集合的差集,即返回的集合元素包含在第一個集合中,但不包含在第二個集合中。返回的是集合。

示例:

>>> citys1 = {'beijing','shanghai','tianjing','wuhan'}

>>> citys2 = {'beijing','shenzheng','tianjing'}

>>> citys3 = citys1.difference(citys2)

>>> citys3 #返回新集合(set1中在set2中不存在的)

{'shanghai', 'wuhan'}

>>> citys1 #不改變原計劃

{'tianjing', 'shanghai', 'beijing', 'wuhan'}


1.8.2.8 difference_update() 移除兩個集合中都存在的元素(原集合剩下第二個集合中不存在的元素)

格式:set1.difference_update(set2), 移除兩個集合中都存在的元素,沒有返回值。

>>> citys1 = {'beijing','shanghai','tianjing','wuhan'}

>>> citys2 = {'beijing','shenzheng','tianjing'}

>>> citys1.difference_update(citys2)? #從set1中移除set2中存在的元素

>>> citys1 #改變原集合

{'shanghai', 'wuhan'}


1.8.2.9 intersection() 返回兩個或更多集合中都包含的元素(不改變原集合)

格式:set1.intersection(set2, set3 ... etc)

返回兩個或更多集合中都包含的元素,即交集,返回的是集合。

>>> citys1 = {'beijing','shanghai','tianjing','wuhan'}

>>> citys2 = {'beijing','shenzheng','tianjing'}

>>> citys3 = citys1.intersection(citys2,citys3)

>>> citys3 #返回新集合,set1和set2中都存在的元素

{'beijing', 'tianjing'}

>>> citys1 #不改變原集合

{'tianjing', 'shanghai', 'beijing', 'wuhan'}


1.8.2.10 intersection_update() 原集合中只保留兩個或更多集合中都存在的元素(改變原集合)

格式和使用方法與intersection相同。無返回值

區別:intersection() 返回一個新的集合;

intersection_update() 在原始的集合上移除不重疊的元素,即在原集合中保留都存在的元素。

>>> citys1 = {'beijing','shanghai','tianjing','wuhan'}

>>> citys2 = {'beijing','shanghai','tianjing'}

>>> citys3 = {'beijing','tianjing'}

>>> citys1.intersection_update(citys2,citys3) #從set1中只保留set2、set3都存在的元素

>>> citys1

{'beijing', 'tianjing'}


1.8.2.11 symmetric_difference() 返回兩個集合中不重復的元素集合

返回兩個集合中不重復的元素集合,即會移除兩個集合中都存在的元素。

語法:set.symmetric_difference(set)


1.8.2.12 isdisjoint() 判斷兩個集合是否不包含相同的元素

格式:set1.isdisjoint(set2)

判斷兩個集合是否不包含相同的元素,如果沒有返回 True,否則返回 False。

示例:

>>> citys1 = {'beijing','shenzheng','tianjing'}

>>> citys2 = {'wuhan','shenzheng'}

>>> citys1.isdisjoint(citys2)

False


1.8.2.13 issubset() 判斷集合的所有元素是否都包含在指定集合中

語法:set1.issubset(set2)

示例:

>>> s1 = {'1','2','a'}

>>> s2 = {'1','a','c','2'}

>>> s1.issubset(s2)

True


1.8.2.14 issuperset() 判斷指定集合的所有元素是否都包含在原始的集合中(與issubset相反)

語法:set1.issuperset(set2)

>>> s1 = {'1','a','c','2'}

>>> s2 = {'1','2','a'}

>>> s1.issuperset(s2)

True

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容