您的“關注”和“點贊”,是信任,是認可,是支持,是動力......
如意見相佐,可留言,
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新,

- 1 set 集合概述
- 2 Python 創建 set 集合
- 2.1 使用 {} 創建
- 2.2 使用 set() 函式創建集合
- 3 Python 訪問 set 集合元素
- 4 Python 洗掉 set 集合
- 5 對 set 集合中元素的操作
- 5.1 向 set 集合中添加元素
- 5.2 從 set 集合中洗掉元素
- 6 Python set 集合之間的運算
- 6.1 交集運算
- 6.2 并集運算
- 6.3 差集運算
- 6.4 對稱差集運算
- 7 set 集合常用方法
- 【文章其它地址】
- 微信公眾號:碼農阿杰
- CSDN 博客
- 【參考資料】
- Python 官網
- Python 3.8.2 documentation
1 set 集合概述
目前有兩種內置集合型別,set 和 frozenset(可參見博文《Python 集合資料型別之二: fronzenset》),
-
set型別:是可變的,其內容可以使用add()和remove()這樣的方法來改變,
由于是可變型別,它沒有哈希值,且不能被用作字典的鍵或其他集合的元素, -
frozenset型別:是不可變并且為hashable,其內容在被創建后不能再改變;
因此它可以被用作字典的鍵或其他集合的元素,
Python 中的 set 集合,將所有元素放在一對大括號 {} 中,相鄰元素之間用 , 分隔,
set 集合是無序的,所以每次輸出時元素的排序順序可能都不相同,
set 集合中的元素都是唯一的,互不相同,并且元素個數沒有限制,
在同一集合中,只能存盤不可變的資料型別,包括數字、字串、元組;無法存盤串列、set 集合、字典這些可變的資料型別,否則 Python 解釋器會拋出 TypeError 錯誤,
舉例如下所示:
例一,在同一集合中,只能存盤不可變的資料型別,包括數字、字串、元組,
set_demo1 = {11, 2.1, True, 4 + 5j, '碼農阿杰', (1, 2, 3)} # 可以存盤整數、浮點數、布林值、復數、字串、元組
print(type(set_demo1))
運行結果:
<class 'set'>
在同一集合中,無法存盤串列、set 集合、字典這些可變的資料型別,否則 Python 解釋器會拋出 TypeError 錯誤,
例二,無法存盤串列
set_demo2 = {[1, 2, 3, 4]} # 無法存盤串列
print(type(set_demo2))
運行結果:
set_demo2 = {[1, 2, 3, 4]} # 無法存盤串列
TypeError: unhashable type: 'list'
例三,無法存盤 set 集合
set_demo3 = {{1, 2, 3, 4}} # 無法存盤 set 集合
print(type(set_demo3))
運行結果:
set_demo3 = {{1, 2, 3, 4}} # 無法存盤 set 集合
TypeError: unhashable type: 'set'
例四,無法存盤字典
set_demo4 = {{'Q': 'python', 'W': 'java'}} # 無法存盤字典
print(type(set_demo4))
運行結果:
set_demo4 = {{'Q': 'python', 'W': 'java'}} # 無法存盤字典
TypeError: unhashable type: 'dict'
在同一集合中,資料必須保證是唯一的,因為集合對于每種資料元素,只會保留一份,
例五,set 集合中的元素都是唯一的,互不相同,
set_demo1 = {11, 2.1, 11, True, 4 + 5j, '碼農阿杰', (1, 2, 3), '碼農阿杰'}
print(set_demo1)
運行結果:
{True, 2.1, 11, (1, 2, 3), '碼農阿杰', (4+5j)}
2 Python 創建 set 集合
2.1 使用 {} 創建
直接使用 {} 創建 set 集合,并把創建好的 set 集合賦值給一個變數,便于以后的使用,
語法格式如下所示:
setname = {element1, element2, ..., elementn}
對以上格式說明,
set:表示集合的名稱,起名時既要符合 Python 命名規范,也要避免與 Python 內置函式重名,同時要“見名知其意”,element1 - elementn:表示 set 集合元素,個數沒有限制,
舉例如下所示:
set_demo = {'微信公眾號:', '碼農阿杰'}
print(type(set_demo))
print(set_demo)
運行結果:
<class 'set'>
{'微信公眾號:', '碼農阿杰'}
2.2 使用 set() 函式創建集合
使用 Python 的內置函式 set()創建集合,
其實是將字串、串列、元組、range 物件等可迭代物件轉換成 set 集合,
注意:如果要創建空集合,只能使用 set() 函式實作,因為直接使用一對 {} 創建 set 集合,Python 解釋器會將其視為一個空字典,
使用語法格式如下所示:
setname = set(iteration)
對以上格式說明,
iteration:表示字串、串列、元組、range 物件等可迭代物件,
舉例如下所示:
例一,
print(set('碼農阿杰'))
print(set([1, 2, 3, 4, 5]))
print(set((1, 2, 3, 4, 5)))
print(set(range(1, 6)))
運行結果:
{'碼', '阿', '農', '杰'}
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
例二,如果要創建空集合,只能使用 set() 函式實作,因為直接使用一對 {} 創建 set 集合,Python 解釋器會將其視為一個空字典,
set_demo1 = {}
set_demo2 = set()
print(type(set_demo1))
print(type(set_demo2))
運行結果:
<class 'dict'>
<class 'set'>
3 Python 訪問 set 集合元素
set 集合中的元素是無序的,因此無法使用索引(下標)訪問元素,
在 Python 中,訪問 set 集合元素,通常使用回圈結構(請參見博文《Python 回圈結構詳解》),將集合中的資料(元素)逐一讀取出來,
舉例如下所示:
set_demo1 = {11, 2.1, True, 4 + 5j, '碼農阿杰', (1, 2, 3)}
for i in set_demo1:
print(i)
運行結果:
True
2.1
11
(1, 2, 3)
(4+5j)
碼農阿杰
4 Python 洗掉 set 集合
手動洗掉 set 集合,可以使用 del 關鍵字,
舉例如下所示:
set_demo1 = {11, 2.1, True, 4 + 5j, '碼農阿杰', (1, 2, 3)}
print('洗掉前 set_demo1 = ', set_demo1)
del set_demo1 # 使用 del 洗掉 set 集合
print('洗掉后 set_demo1 = ', set_demo1)
運行結果:
洗掉前 set_demo1 = {True, 2.1, 11, (1, 2, 3), '碼農阿杰', (4+5j)}
Traceback (most recent call last):
File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 18, in <module>
print('洗掉后 set_demo1 = ', set_demo1)
NameError: name 'set_demo1' is not defined
5 對 set 集合中元素的操作
5.1 向 set 集合中添加元素
向 set 集合中添加元素,可以使用 set 型別提供的 add() 方法實作,
注意:使用 add() 方法添加的元素,只能是不可變資料,包含數字、字串、元組;不能添加串列、集合、字典這類可變的資料,否則 Python 解釋器會報 TypeError 錯誤,
使用語法格式如下所示:
setname.add(element)
對以上格式說明,
setname:表示要添加元素的 set 集合,element:表示要添加到 set 集合中的元素,
舉例如下所示:
例一,向 set 集合中添加的元素為字串
set_demo1 = {11, 2.1, True, 4 + 5j, '碼農阿杰', (1, 2, 3)}
print('添加前 set_demo1 =', set_demo1)
set_demo1.add('https://blog.csdn.net/manongajie') # 向 set 集合中添加元素
print('添加后 set_demo1 =', set_demo1)
運行結果:
添加前 set_demo1 = {True, 2.1, 11, (1, 2, 3), '碼農阿杰', (4+5j)}
添加后 set_demo1 = {True, 2.1, 'https://blog.csdn.net/manongajie', 11, (1, 2, 3), '碼農阿杰', (4+5j)}
例二,向 set 集合中添加的元素為串列
set_demo1 = {11, 2.1, True, 4 + 5j, '碼農阿杰', (1, 2, 3)}
print('添加前 set_demo1 =', set_demo1)
set_demo1.add([1, 2, 3, 4])
print('添加后 set_demo1 =', set_demo1)
運行結果:
添加前 set_demo1 = {True, 2.1, 11, (1, 2, 3), (4+5j), '碼農阿杰'}
Traceback (most recent call last):
File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 15, in <module>
set_demo1.add([1, 2, 3, 4])
TypeError: unhashable type: 'list'
5.2 從 set 集合中洗掉元素
洗掉 set 集合中的指定元素,可以使用 remove() 方法,
注意:如果要洗掉的元素不在集合中,則此方法會拋出 KeyError 錯誤,此時,可以使用 discard() 方法,此方法和 remove() 方法的用法完全相同,唯一的區別在于當洗掉集合中元素失敗時,此方法不會拋出任何錯誤,
使用語法格式如下所示:
setname.remove(element)
對以上格式說明,
setname:要洗掉元素的 set 集合,element:表示要洗掉的元素,
舉例如下所示:
例一,
set_demo1 = {11, 2.1, True, 4 + 5j, '碼農阿杰', (1, 2, 3)}
print('洗掉前 set_demo1 =', set_demo1)
set_demo1.remove(11)
print('洗掉后 set_demo1 =', set_demo1)
運行結果:
洗掉前 set_demo1 = {True, 2.1, 11, (1, 2, 3), '碼農阿杰', (4+5j)}
洗掉后 set_demo1 = {True, 2.1, (1, 2, 3), '碼農阿杰', (4+5j)}
例二,使用 remove() 方法洗掉 set 集合中不存在的元素,會報錯
set_demo1 = {11, 2.1, True, 4 + 5j, '碼農阿杰', (1, 2, 3)}
print('洗掉前 set_demo1 =', set_demo1)
set_demo1.remove('阿杰')
print('洗掉后 set_demo1 =', set_demo1)
運行結果:
洗掉前 set_demo1 = {True, 2.1, 11, (1, 2, 3), '碼農阿杰', (4+5j)}
Traceback (most recent call last):
File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 15, in <module>
set_demo1.remove('阿杰')
KeyError: '阿杰'
例三,使用 discard() 方法洗掉 set 集合中不存在的元素,不會報錯
set_demo1 = {11, 2.1, True, 4 + 5j, '碼農阿杰', (1, 2, 3)}
print('洗掉前 set_demo1 =', set_demo1)
set_demo1.discard('阿杰')
print('洗掉后 set_demo1 =', set_demo1)
運行結果:
洗掉前 set_demo1 = {True, 2.1, 11, (1, 2, 3), (4+5j), '碼農阿杰'}
洗掉后 set_demo1 = {True, 2.1, 11, (1, 2, 3), (4+5j), '碼農阿杰'}
6 Python set 集合之間的運算
6.1 交集運算
set 集合間的交集運算:取兩集合公共的元素,
運算子位:&,
舉例如下所示:
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1 & set2)
運行結果:
{4, 5}
6.2 并集運算
set 集合間的并集運算:取兩集合全部的元素,
運算子位:|,
舉例如下所示:
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1 | set2)
運行結果:
{1, 2, 3, 4, 5, 6, 7, 8}
6.3 差集運算
set 集合間的差集運算:取一個集合(被減數集合)中另一個集合沒有的元素,
運算子位:-,
舉例如下所示:
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print('set1 - set2 =', set1 - set2)
print('set2 - set1 =', set2 - set1)
運行結果:
set1 - set2 = {1, 2, 3}
set2 - set1 = {8, 6, 7}
6.4 對稱差集運算
set 集合間的對稱差集運算:取集合 A 和 B 中不屬于 A&B 的元素,
運算子位:^,
舉例如下所示:
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1 ^ set2)
運行結果:
{1, 2, 3, 6, 7, 8}
7 set 集合常用方法
請參見博文 《Python set 集合常用方法詳解》,
【文章其它地址】
微信公眾號:碼農阿杰
CSDN 博客
【參考資料】
Python 官網
Python 3.8.2 documentation
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/144585.html
標籤:Python
上一篇:Python 二進制序列型別之二:bytearray [學習 Python 必備基礎知識][看此一篇就夠了][創建 bytearray 物件][bytearray() 構造器]
下一篇:Python 集合資料型別之二: fronzenset [學習 Python 必備基礎知識][看此一篇就夠了][fronzenset 集合概述][fronzenset 集合的使用]
