Python中的集合 Set

2022-10-06 22:12:25 字數 4709 閱讀 2376

在python中,集合(set) 是乙個無序、不重複的序列,它不支援索引。

一般在建立集合時,分為建立空集合和非空集合,其建立方式如下:

# 建立空集合

set1 = set()

# 建立同一資料型別元素的集合

set2 =

# 建立不同資料型別元素的集合

set3 =

從上面可以看到,我們只需要把集合的所有元素放在大括號 {}裡面,每個元素之間通過逗號 ,間隔起來即可,但需要注意的是,我們建立空集合是不能通過{}來建立,因為{}表示的是乙個空字典。

當然,集合中同樣允許存放不同資料型別的元素,但有一點比較特殊,集合中存放的元素必須是不可變物件,而在python中 list、dict、set 都是可變物件,所以集合中不允許存放 list、dict、set 型別的元素,否則會出現報錯。

>>> set1 = 

traceback (most recent call last):

file "", line 1, in typeerror: unhashable type: 'list'

>>>

>>> set1 = }

traceback (most recent call last):

file "", line 1, in typeerror: unhashable type: 'dict'

>>>

>>> set1 = }

traceback (most recent call last):

file "", line 1, in typeerror: unhashable type: 'set'

我們在集合中可以存放元組,假如我們在元組中儲存有 list、dict、set 型別的物件,然後再把該元組作為乙個元素儲存到集合中,這樣做是否可行呢?

答案是否定的。不管巢狀了多少層,只要集合元素**現了可變物件,儲存到集合時就會出現報錯。

集合中是不允許出現重複元素的,當我們儲存多個重複元素到集合中,集合就會自動去重,每個元素只保留乙個。

>>> set1 = 

>>> set1

>>>

>>> set2 =

>>> set2

有時候我們會有一種錯覺,認為集合似乎是有序的,比如下面這個例子:

>>> set1 = 

>>> set1

從上面看起來,集合貌似自動進行了排序,但我們在集合中多放幾個元素時,就能夠明顯感受到集合無序的特點,比如下面這個例子:

>>> set1 = 

>>> set1

當我們在使用到集合時,不應該假定其有順序,即便其可能會有某種順序,我們也應該把其當作無序進行使用。

我們把乙個元素新增到集合中,如果集合中已經存在該元素,那麼集合不進行任何操作。

>>> set1 = 

>>>

>>> set1.add(5)

>>> set1

>>>

>>> set1.add(3)

>>> set1

我們通過update()新增元素時,引數必須是可迭代物件,比如可以是 str、list、tuple、set、dict 等型別,該方法不同於add()方法,add()是把引數當作乙個整體新增到集合中,而update()則是把引數裡的所有元素逐一新增到集合中。

>>> set1 = 

>>>

>>> set1.update("ab")

>>> set1

>>>

>>> set1.update([11, 22])

>>> set1

>>>

>>> set1.update((33, (44, 55)))

>>> set1

如果新增的元素在集合中已經存在,那麼該元素只會出現一次,會忽略掉重複元素。

>>> set1 = 

>>>

>>> set1.update([11, 22], (22, 33)) # 新增中有重複元素

>>> set1

>>>

>>> set1 = 

>>>

>>> set1.remove(2)

>>> set1

>>>

>>> set1.remove(2) # 元素不存在,會報錯

traceback (most recent call last):

file "", line 1, in keyerror: 2

>>> set1 = 

>>>

>>> set1.discard(2)

>>> set1

>>>

>>> set1.discard(2) # 元素不存在,並不會報錯

>>> set1

>>> set1 = 

>>>

>>> set1.pop()

2>>> set1.pop()

996>>> set1.pop()

101>>> set1.pop()

6>>> set1.pop()

7>>> set1

如果集合為空時使用pop()方法,則會出現報錯:

>>> set1 = set()

>>>

>>> set1.pop()

traceback (most recent call last):

file "", line 1, in keyerror: 'pop from an empty set'

>>> set1 = 

>>>

>>> set1.clear()

>>>

>>> print(set1)

set()

>>> set1 = 

>>> set2 =

>>>

>>> set1 & set2

>>> set1 = 

>>> set2 =

>>>

>>> set1 | set2

>>> set1 = 

>>> set2 =

>>>

>>> set1 - set2

>>>

>>> set2 - set1

>>> set1 = 

>>> set2 =

>>>

>>> set1 ^ set2

通過關鍵字in,可檢查當前集合中是否包含指定元素,返回結果為布林值 true 或 false。

>>> set1 = 

>>>

>>> print(2 in set1)

true

>>>

>>> print(6 in set1)

false

通過關鍵字in,還可以用於遍歷當前集合。

books = 

for i in books:

print(i, end=" ")

函式 & 方法

描述len(set)

返回集合元素個數

max(set)

返回集合元素最大值

min(set)

返回集合元素最小值

set(iterable)

將可迭代物件轉換為集合,若 iterable 為空則建立空集合

set.add(obj)

給集合新增元素

set.update(obj)

給集合新增元素

set.remove(obj)

刪除集合中指定元素,元素不存在會報錯

set.discard(obj)

刪除集合中指定元素,元素不存在不會報錯

set.pop()

隨機刪除元素

set.clear()

清空集合中所有元素

set.copy()

拷貝乙個集合,使用的是淺拷貝

set1.difference(set2)

返回多個集合的差集

set1.intersection(set2)

返回集合的交集

set1.isdisjoint(set2)

判斷兩個集合是否包含相同的元素,如果沒有返回 true,否則返回 false

set1.issubset(set2)

判斷指定集合是否為該方法引數集合的子集

set1.symmetric_difference(set2)

返回兩個集合中不重複的元素集合

set1.union(set2)

返回兩個集合的並集

Python 中的集合(set)

set 擁有類似 dict 的特點 可以用 花括號來定義 不推薦使用 其中的元素沒有序列,也就是是非序列型別的資料 set 中的元素不可重複,類似 dict 的鍵.set 也有一點 list 的特點 有一種集合可以原處修改.一 建立 set s1 set zhrq95 s1 set z h r q ...

python中set集合的用法

python的set和其他語言類似,是乙個無序不重複元素集,基本功能包括關係測試和消除重複元素.集合物件還支援union 聯合 intersection 交 difference 差 和sysmmetric difference 對稱差集 等數 算.sets 支援 x in set,len set ...

Python中的SET集合操作

python的set和其他語言類似,是乙個無序不重複元素集,基本功能包括關係測試和消除重複元素.集合物件還支援union 聯合 intersection 交 difference 差 和sysmmetric difference 對稱差集 等數 算.sets 支援x in set,len set 和...