網(wǎng)站首頁 編程語言 正文
簡(jiǎn)介
集合對(duì)象 set 是由具有唯一性的可哈希對(duì)象組成的無序多項(xiàng)集,如 list 不能哈希因此,不能作為 set 的一項(xiàng)。
set 的常見用途包括成員檢測(cè)、從序列中去除重復(fù)項(xiàng)以及數(shù)學(xué)中的集合類計(jì)算,如交集、并集、差集與對(duì)稱差集等。
set 不記錄元素位置或插入順序。 相應(yīng)地,set 不支持索引、切片或其他序列操作。
目前有兩種內(nèi)置集合類型,set 和 frozenset:
- set 是可變的,其內(nèi)容可以通過 add() 和 remove() 來改變。由于是可變類型,所以不可哈希值,則不能作為字典的鍵或其他集合的元素。
- frozenset 是不可變的,所以可哈希,因此可以用為字典的鍵或其他集合的元素。
除了可以使用 set 構(gòu)造器,非空的 set (不是 frozenset) 還可以通過將以逗號(hào)分隔的元素列表包含于花括號(hào)之內(nèi)來創(chuàng)建,例如: {‘jack’, ‘sjoerd’}。
構(gòu)造
花括號(hào)內(nèi)用逗號(hào)分隔
集合推導(dǎo)式
類型構(gòu)造器
a = {1, 2, 3} # 花括號(hào)內(nèi)用逗號(hào)分隔 b = {i for i in range(4) if i > 0} # 集合推導(dǎo)式 c = set([1, 2, 3]) # 類型構(gòu)造器 print(a, type(a)) print(b, type(b)) print(c, type(c)) # {1, 2, 3} <class 'set'> # {1, 2, 3} <class 'set'> # {1, 2, 3} <class 'set'>
基本使用
a = {1, 2, 3} print(len(a)) # 元素?cái)?shù)量 print(1 in a) # 檢測(cè)成員 print(1 not in a) # 檢測(cè)成員 # 3 # True # False
交集、并集、差集、對(duì)稱差集
A = {1, 2, 3} B = {3, 4, 5} print(A.intersection(B)) # 交集 print(A.union(B)) # 并集 print(A.difference(B)) # 差集 print(A.symmetric_difference(B)) # 對(duì)稱差集 # {3} # {1, 2, 3, 4, 5} # {1, 2} # {1, 2, 4, 5}
無交集、子集、超集
- 與other無交集:
isdisjoint(other)
- 是other的子集:
issubset(other)
,相當(dāng)于?set <= other
- 是other的超集:
issuperset(other)
,相當(dāng)于?set >= other
A = {1, 2, 3} B = {3, 4, 5} C = {1, 2, 3, 4, 5, 6} D = {7, 8, 9} # 是否無交集 print(A.isdisjoint(A)) # False print(A.isdisjoint(B)) # False print(A.isdisjoint(C)) # False print(A.isdisjoint(D)) # True print() # 是否子集 print(A.issubset(A)) # True print(A.issubset(B)) # False print(A.issubset(C)) # True print(A.issubset(D)) # False print() # 是否超集 print(C.issuperset(A)) # True print(C.issuperset(B)) # True print(C.issuperset(C)) # True print(C.issuperset(D)) # False
運(yùn)算符
A、B、C 是 C 的子集,C 是 A、B、C 的超集
A、B 是 C 的真子集,C 是 A、B 的真超集
運(yùn)算符 | 含義 |
---|---|
<= | 子集 |
< | 真子集 |
>= | 超集 |
> | 真超集 |
& | 交集 |
| | 并集 |
- | 差集 |
^ | 對(duì)稱差集 |
A = {1, 2, 3} B = {3, 4, 5} C = {1, 2, 3, 4, 5, 6} D = {7, 8, 9} # 子集,相當(dāng)于issubset(other) print(A <= C) # True print(B <= C) # True print(C <= C) # True print(D <= C) # False print() # 真子集 print(A < C) # True print(B < C) # True print(C < C) # False print(D < C) # False print() # 超集,相當(dāng)于issuperset(other) print(C >= A) # True print(C >= B) # True print(C >= C) # True print(C >= D) # False print() # 真超集 print(C > A) # True print(C > B) # True print(C > C) # False print(C > D) # False print() # 交集,相當(dāng)于intersection(*other) print(A & B) # {3} print(A.intersection(B)) # {3} # 并集,相當(dāng)于union(*other) print(A | B) # {1, 2, 3, 4, 5} print(A.union(B)) # {1, 2, 3, 4, 5} # 差集,相當(dāng)于difference(*other) print(A - B) # {1, 2} print(A.difference(B)) # {1, 2} # 對(duì)稱差集,相當(dāng)于symmetric_difference(other) print(A ^ B) # {1, 2, 4, 5} print(A.symmetric_difference(B)) # {1, 2, 4, 5}
可用于 set 的操作
不可用于不可變的 frozenset
操作 | 含義 |
---|---|
add(elem) | 添加單個(gè)元素 |
remove(elem) | 移除單個(gè)元素,如果不存在報(bào)錯(cuò) |
discard(elem) | 移除單個(gè)元素,如果存在 |
pop() | 移除并返回任一元素,集合為空?qǐng)?bào)錯(cuò) |
clear() | 移除所有元素 |
update(*others) set |= other |
添加元素 |
difference_update(*others) set -= other |
移除元素 |
symmetric_difference_update(other) set ^= other |
移除相同元素 |
A = {1, 2, 3} A.add(4) # 添加單個(gè)元素 print(A) # {1, 2, 3, 4} A = {1, 2, 3} A.remove(3) # 移除單個(gè)元素,如果不存在報(bào)錯(cuò) print(A) # {1, 2} A = {1, 2, 3} A.discard(3) # 移除單個(gè)元素,如果存在 A.discard(99) # 移除單個(gè)元素,如果存在 print(A) # {1, 2} A = {2, 1, 3} print(A.pop()) # 移除并返回任一元素,集合為空?qǐng)?bào)錯(cuò) A = {1, 2, 3} A.clear() # 移除所有元素 print(A) # set()
A = {1, 2, 3} B = {3, 4, 5} A.update(B) # 添加元素 # A |= B # 添加元素 print(A) # {1, 2, 3, 4, 5} A = {1, 2, 3} B = {3, 4, 5} A.difference_update(B) # 移除元素 # A -= B # 移除元素 print(A) # {1, 2} A = {1, 2, 3} B = {3, 4, 5} A.symmetric_difference_update(B) # 移除相同元素 # A ^= B # 移除相同元素 print(A) # {1, 2, 4, 5}
原文鏈接:https://xercis.blog.csdn.net/article/details/118487355
相關(guān)推薦
- 2022-07-22 linux centos 7 vim配置詳解
- 2022-08-20 ORACLE中dbms_output.put_line輸出問題的解決過程_oracle
- 2022-07-13 Stream的源碼簡(jiǎn)單解析
- 2022-04-18 騰訊im中調(diào)用 setMessageRead 會(huì)話列表中的未讀消息還在存在
- 2022-11-16 PyTorch中torch.utils.data.DataLoader實(shí)例詳解_python
- 2022-07-07 C語言數(shù)組快速入門詳細(xì)講解_C 語言
- 2022-09-25 自動(dòng)微分----pytorch中的梯度運(yùn)算與反向傳播函數(shù)(預(yù)備知識(shí))
- 2022-06-08 Golang原生rpc(rpc服務(wù)端源碼解讀)_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支