Python 中的 `set` 集合,將所有元素放在一對大括弧 `{}` 中,相鄰元素之間用 `,` 分隔。 set 集合是無序的,所以每次輸出時元素的排序順序可能都不相同。 set 集合中的元素都是唯一的,互不相同。並且元素個數沒有限制。 在同一集合中,只能存儲不可變的數據類型,包括數字、字元串、... ...
您的“關註”和“點贊”,是信任,是認可,是支持,是動力......
如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。
目錄
- 1 set 集合概述
- 2 Python 創建 set 集合
- 3 Python 訪問 set 集合元素
- 4 Python 刪除 set 集合
- 5 對 set 集合中元素的操作
- 6 Python set 集合之間的運算
- 7 set 集合常用方法
- 【文章其它地址】
- 【參考資料】
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 集合常用方法詳解》。