微信公衆號:碼農充電站pro
我的主頁:https://codeshellme.github.iohtml
若是代碼和註釋不一致,那極可能二者都錯了。
—— Norm Schryerpython
目錄git
前幾節咱們已經介紹了Python 中的列表list
,元組tuple
和 字典dict
,本節來介紹Python 中的最後一種數據結構——集合set
。github
>>> set <type 'set'>
Python 中的set
與 dict
很像,惟一的不一樣是,dict
中保存的是鍵值對
,而set
中只保存鍵
,沒有值
。shell
Python 集合
有以下特色:數組
惟一
的,不重複
的無序
的不可變
類型,好比字符串
,數字
,元組
增長/刪除
擴容
和縮容
集合,方便開發者使用Python 集合的聲明有兩種方式:微信
set()
建立集合,()
中可爲空,也能夠是任意的可迭代
類型,好比列表
,元組
,字典
{}
建立集合,從該建立方式上也能看出集合
與字典
很像建立空集合
時,只能用set()
,而不能用{}
:數據結構
>>> s = set() # 空集合 >>> s set() >>> s = {} # 空的 {} 會被解析成字典 >>> s {}
建立非空集合
時,能夠用set()
,也能夠用{}
:ssh
>>> s = {1, 'abc', 1.5} # 用 {} 建立集合 >>> s {1, 'abc', 1.5} >>> s = set([1, 'abc', 1.5]) # 用列表建立集合 >>> s {1, 'abc', 1.5} >>> s = set((1, 'abc', 1.5)) # 用元組建立集合 >>> s {1, 'abc', 1.5} >>> s = set({'a':1, 'b':2, 'c':3}) # 用字典建立集合 >>> s # 只會包含字典中的鍵 {'c', 'b', 'a'}
因爲集合中的元素是惟一的,若是初始化時的可迭代
數據中有重複的元素,則會自動刪去重複的元素:函數
>>> s = set([1, 2, 2, 3]) # 列表中有兩個 2 >>> s # 集合中只有一個 2 {1, 2, 3}
使用len()
函數能夠查看集合中元素的個數:
>>> s = set([1, 'abc', 1.5]) >>> s {1, 'abc', 1.5} >>> len(s) # 元素個數 3
因爲Python 集合中的元素的是無序的,因此可不能使用下標
的方式來訪問集合中的單個元素。
咱們可使用for 循環
來遍歷集合中的全部元素:
>>> s = set([1, 'abc', 1.5]) >>> for i in s: ... print(i) ... 1 abc 1.5
咱們能夠對兩個集合進行以下運算:
& 運算
:計算集合的交集
| 運算
:計算集合的並集
in 運算
:判斷某個元素是否在集合中交集與並集
>>> s1 = set([1, 2, 3]) >>> s2 = set([2, 3, 4]) >>> s1 & s2 # 交集 {2, 3} >>> s1 | s2 # 並集 {1, 2, 3, 4}
in 運算
>>> s = set([1 , 2, 3]) >>> 1 in s True >>> 2 not in s False
使用dir(set)
查看集合支持的全部方法:
>>> dir(set) ['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
下面一一介紹這些非魔法方法
,共17 個。
1.add
方法
做用:向集合
S
中添加元素
原型:S.add(...) -> None
參數:任意不可變
類型數據
返回值: 老是返回None
因爲集合中的元素是惟一的,向集合中添加元素時有兩種狀況:
示例:
>>> s = set([1, 3, 5]) # 初始化一個集合 >>> s {1, 3, 5} >>> s.add(7) # 向集合中添加一個不存在的元素 >>> s {1, 3, 5, 7} >>> s.add(5) # 向集合中添加一個已存在的元素 >>> s {1, 3, 5, 7}
2.remove
方法
做用:刪除集合
S
中的元素
原型:S.remove(...) -> None
參數:任意不可變
類型數據
返回值:當要刪除的元素存在時,返回None
,不然,拋出異常
示例:
>>> s = set([1, 3, 5]) >>> s {1, 3, 5} >>> s.remove(3) # 元素 3 存在 >>> s # 成功刪除 {1, 5} >>> s.remove(3) # 元素 3,已不存在 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 3 # 拋出異常
3.discard
方法
做用:用於刪除集合
S
中的元素,與remove
方法的不一樣是,若是元素不存在,不會拋出異常
原型:S.discard(...) -> None
參數:任意不可變
類型數據
返回值:老是返回None
示例:
>>> s = set([1, 3, 5, 6]) >>> s.discard(3) # 刪除一個已存在的元素 >>> s {1, 5, 6} >>> s.discard(7) # 刪除一個不存在的元素 >>> s {1, 5, 6}
4.pop
方法
做用:隨機刪除並返回集合
S
中的一個元素
原型:S.pop() -> item
參數:無
返回值:被刪除的元素,若是集合爲空,拋出異常
示例:
>>> s = set([3, 5, 1]) >>> s.pop() # 刪除並返回 1 1 >>> s.pop() # 刪除並返回 3 3 >>> s.pop() # 刪除並返回 5 5 >>> s # 集合爲空 set() >>> s.pop() # 拋出異常 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'pop from an empty set'
5.union
方法
做用:用於合併多個集合,至關於多個集合作
並集運算
原型:set.union(...) -> set
參數:任意多個可迭代類型數據
返回值: 返回新的集合
示例:
>>> # 參數中有集合,元組,列表 >>> set.union({2, 3}, (3, 5), [5, 6]) {2, 3, 5, 6}
6.update
方法
做用:向集合
S
中添加元素
原型:S.update(...) -> None
參數:任意多個可迭代類型數據
返回值:老是返回None
示例:
>>> s = set({2}) >>> s {2} >>> s.update({3, 5}, {5, 6}, [7, 8]) >>> s {2, 3, 5, 6, 7, 8}
7.clear
方法
做用:清空集合
S
原型:S.clear() -> None
參數:無
返回值:老是返回None
示例:
>>> s = set([1, 3, 5]) >>> s {1, 3, 5} >>> s.clear() >>> s # 集合爲空 set()
8.copy
方法
做用:淺拷貝集合
S
原型:S.copy( ) -> set
參數:無
返回值:一個集合
示例:
>>> s = set([1, 3, 5]) >>> s {1, 3, 5} >>> s1 = s.copy() >>> s1 {1, 3, 5}
9.difference
方法
做用:集合的差集
原型:S.difference(...) -> set
參數:任意多個可迭代類型數據
返回值:一個集合
示例:
>>> s = set([1, 3, 5, 6]) >>> # 參數能夠是任意的可迭代類型 >>> s.difference({1}, [3], (4, 5)) {6}
10.difference_update
方法
做用:集合的差集,與
difference
方法的不一樣是,difference_update
直接在集合S
上作修改
原型:S.difference_update(...) -> None
參數:任意多個可迭代類型數據
返回值:老是返回None
示例:
>>> s = set([1, 3, 5, 6]) >>> s.difference_update({1}, [3], (4, 5)) >>> s {6}
11.intersection
方法
做用:集合的交集
原型:S.intersection(...) -> set
參數:任意多個可迭代類型數據
返回值:一個集合
示例:
>>> s = set([1, 3, 5, 6]) >>> s.intersection({1}, [3], (4, 5)) # 至關於 s & {1} & [3] & (4, 5) set() >>> s.intersection({1, 3}, [3, 4], (3, 4, 5)) # 至關於 s & {1, 3} & [3,4] & (3, 4, 5) {3}
12.intersection_update
方法
做用:集合的交集,與
intersection
方法的不一樣是,intersection_update
直接在集合S
上作修改
原型:S.difference_update(...) -> None
參數:任意多個可迭代類型數據
返回值:老是返回None
示例:
>>> s = set([1, 3, 5, 6]) >>> s.intersection_update({1, 3}, [3,4], (3, 4, 5)) >>> s {3}
13.isdisjoint
方法
做用:用於判斷兩個集合中是否有相同的元素
原型:S.isdisjoint(...) -> bool
參數:任意可迭代類型數據
返回值:若是有相同的元素,返回False
,不然,返回True
示例:
>>> s1 = set([1, 2, 3]) >>> s2 = set([3, 4, 5]) >>> s3 = set([5, 6]) >>> s1.isdisjoint(s2) # s1, s2 中有相同的元素 False >>> s1.isdisjoint(s3) # s1, s3 中沒有相同的元素 True >>> s1.isdisjoint((4, 5)) # 參數是元組 True
14.issubset
方法
做用:判斷集合
S
是不是另外一個集合的子集
原型:S.issubset(...) -> bool
參數:任意可迭代類型數據
返回值:bool
類型
示例:
>>> s = set([1, 3, 5]) >>> s.issubset({1, 3, 5, 7}) # 參數是字典 True >>> s.issubset([1, 3, 5, 7]) # 參數是數組 True >>> s.issubset([1, 3, 7]) False
15.issuperset
方法
做用:判斷一個集合是不是另外一個集合
S
的子集,是issubset
方法的反義
原型:S.issuperset(...) -> bool
參數:任意可迭代類型數據
返回值:bool
類型
示例:
>>> s.issuperset({1, 3, 5, 7}) False >>> s.issuperset({1, 3}) True
16.symmetric_difference
方法
做用:返回兩個集合中不重複的元素集合
原型:S.symmetric_difference(...) -> set
參數:任意可迭代類型數據
返回值:一個集合
示例:
>>> s = set([1, 3, 5]) >>> s {1, 3, 5} >>> s.symmetric_difference([8, 9]) {1, 3, 5, 8, 9} >>> s.symmetric_difference([8, 3]) {8, 1, 5}
17.symmetric_difference_update
方法
做用:求兩個集合中不重複的元素集合,與
symmetric_difference
方法的不一樣是,symmetric_difference_update
方法,直接在S
修改
原型:S.symmetric_difference_update(...) -> None
參數:任意可迭代類型數據
返回值:老是返回None
示例:
>>> s = set([1, 3, 5]) >>> s.symmetric_difference_update({6, 8}) >>> s {1, 3, 5, 6, 8} >>> s.symmetric_difference_update({6, 8}) >>> s {1, 3, 5}
(完。)
推薦閱讀:
Python 簡明教程 --- 8,Python 字符串函數
歡迎關注做者公衆號,獲取更多技術乾貨。