python集合型別

2021-09-07 20:48:16 字數 3141 閱讀 2062

集合也是容器,其內元素都是無序、唯

一、不可變的。它常用來做成員測試、移除重複資料、資料計算(比如交集、並集、差集)。

集合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 因為集合是由一組無序排列的元素組成的,因此也就沒有索引 切片 鍵的概念來訪問集合元素 ...