集合也是容器,其內元素都是無序、唯
一、不可變的。它常用來做成員測試、移除重複資料、資料計算(比如交集、並集、差集)。
集合set是dict的無value版。集合也使用大括號包圍:
>>> s =
>>> type(s)
set中的元素和dict一樣也是通過hash值來儲存的:將元素hash()得到hash值,儲存到set中。所以,set中的元素必須是不可變資料(例如列表不能放進集合中)。但集合自身是可變的,可以修改其中的元素。此外,python提供了另一種不可變的集合型別frozenset。
使用大括號或set()構造方法可以構造集合。
s =
s = set("abc")
s = frozenset("abc")
需要注意的是,空的{}
表示的字典,而不是集合,如果想要構造空集合,可以使用不帶引數的set()來構造。
由於集合是通過hash值來儲存的,沒有位置索引。所以沒法對集合進行單元素的檢索,只能對集合進行修改操作,或迭代、遍歷。
>>> x = set("abcde")
>>> y = set("defgh")
>>> z = set("opq")
>>> x
>>> y
集合的運算有交集、並集、差集等操作。它們都有兩種方式:操作符號版的,方法函式版的。符號版的都只能集合對集合,函式版的可以集合和其它比較,比如列表。
交集&
或intersection()方法:
>>> x & y
>>> x.intersection(y)
>>> x & ["a", "c"]
traceback (most recent call last):
file "", line 1, in typeerror: unsupported operand type(s) for &: 'set' and 'list'
>>> x.intersection(["a","c"])
並集|
或union()方法:
>>> x | y
>>> x | y | z
>>> x.union(y)
>>> x.union(["x", "y"])
>>> x.union(["x", "y"], ["o", "p"])
差集-
或difference():
>>> x-y
>>> y-x
>>> x.difference(y)
>>> y.difference(x)
還有xor操作,取集合1、集合2中非交集的部分:
>>> x ^ y
>>> x.symmetric_difference(y)
下面是測試兩個集合之間是否是子集、真子集、超集的關係,s1和s2都是集合。同樣,使用函式版的可以是其它型別。
# 子集
s1 <= s2
s1.issubset(s2)
s1.issubset(other_type)
# 真子集
s1 < s2
# 超集
s1 >= s2
s1.issuperset(s2)
s1.issuperset(other_type)
# 真超集
s1 > s2
s1.isdisjoint(other_type)
測試集合和另乙個資料容器(如集合、列表)是否存在相交資料。即集合中的元素和其它容器是否有共同資料,如果有則返回false,否則返回true。
>>> x.isdisjoint(y)
false
>>> x.isdisjoint(z)
true
>>> x.isdisjoint(list("ab"))
false
>>> x.isdisjoint(list("opq"))
true
集合型別(不是frozenset)是可變的容器型別,可以修改它(但沒法檢索它)、測試、迭代它,但不能檢索它(除非迭代、遍歷)。
s1.add(elem)新增元素到集合s1中。因為集合中的元素都唯一,所以新增已存在的元素不會有任何效果,但也不會報錯。
s1.remove(elem)移除集合s1中的元素。
s1.pop()隨機移除乙個元素並返回這個元素。
s1.clear()清空集合。
s1.discard(elem)移除已存在的某個元素,如果不存在則無視(返回none)。
s1.copy()拷貝(淺拷貝)集合s1。
len(s1)返回集合s1長度。
i in s1測試元素i是否在集合s1中。
除了這些基本操作外,還有基於集合運算的修改操作。
取得並集後覆蓋集合s1:
s1.update(*others)
s1 |= other |...
取得交集後覆蓋集合s1:
s1.intersection_update(*others)
s1 &= other & ...
取得差集後覆蓋集合s1:
s1.difference_update(*others)
s1 -= other |...
取得xor運算後的結果覆蓋集合s1:
s1.symmetric_difference_update(other)
s1 ^= other
到目前為止,各種解析表示式的方式已經很清晰了。所以看示例即可:
>>>
>>>
python的集合型別
pythoners 王大炮 李二丫 陳獨秀 艾里克斯 wxx 歐德博愛 linuxers 陳獨秀 wxx egon 張全蛋 l1 forstuinpythoners ifstuinlinuxers print stu print l1 l2 forstuinpythoners ifstunot in...
Python集合(set)型別
python的set和其他語言類似,是乙個無序不重複元素集,基本功能包括關係測試和消除重複元素.集合物件還支援union 聯合 intersection 交 difference 差 和sysmmetric difference 對稱差集 等數 算.sets 支援 x in set,len set ...
python3集合 Python 集合型別
一 集合型別簡介 1 集合 set 是由一組無序排列的元素組成的,集合中的成員稱為集合元素 2 集合型別分為可變集合和不可變集合,可變集合 set 可以新增 刪除元素,不可變集合 frozenset 則不可以 3 因為集合是由一組無序排列的元素組成的,因此也就沒有索引 切片 鍵的概念來訪問集合元素 ...