【python全棧系列】day07-python數據類型-集合

Python中的集合(Set)是一個無序的、不包含重復元素的數據結構。它主要用于數學上的集合操作,如并集、交集、差集和對稱差集等。集合的基本用途包括去重和關系測試。

1、集合的特性

  • 無序性:集合中的元素是無序的,這意呀著集合不支持索引操作。
  • 唯一性:集合中的元素是唯一的,不允許有重復的元素。
  • 可變性:集合是可變的,即可以在創建后添加或刪除元素。

2、集合的創建

集合可以使用大括號 {} 創建,但需要注意的是,空集合不能使用 {}(這會創建一個空字典),而應該使用 set()。

# 創建一個空集合  
my_set = set()  # 創建一個包含幾個元素的集合  
my_set = {1, 2, 3, 4, 5}  # 注意:集合中的元素是無序的  
print(my_set)  # 輸出可能不是 {1, 2, 3, 4, 5},因為集合是無序的

3、集合的操作

3.1、添加元素

使用 .add() 方法可以向集合中添加一個元素。

my_set = {1, 2, 3}  
my_set.add(4)  
print(my_set)  # 輸出: {1, 2, 3, 4}

3.2、刪除元素

  • remove(element):如果元素存在于集合中,則將其移除。如果元素不存在,則拋出 KeyError。
  • discard(element):如果元素存在于集合中,則將其移除。如果元素不存在,則不執行任何操作。
  • pop():隨機移除集合中的一個元素并返回它。如果集合為空,則拋出 KeyError。
my_set = {1, 2, 3, 4}  
my_set.remove(2)  
print(my_set)  # 輸出: {1, 3, 4}  my_set.discard(5)  # 5 不在集合中,不會拋出異常  
print(my_set)  # 輸出: {1, 3, 4}  pop_element = my_set.pop()  
print(pop_element)  # 輸出集合中的一個隨機元素  
print(my_set)  # 集合中少了一個元素

3.3、集合的運算

  • 并集:使用 | 運算符或 .union() 方法可以求兩個集合的并集。
  • 交集:使用 & 運算符或 .intersection() 方法可以求兩個集合的交集。
  • 差集:使用 - 運算符或 .difference() 方法可以求兩個集合的差集(第一個集合中有但第二個集合中沒有的元素)。
  • 對稱差集:使用 ^ 運算符或 .symmetric_difference() 方法可以求兩個集合的對稱差集(存在于一個集合中但不同時存在于兩個集合中的元素)。
set1 = {1, 2, 3, 4}  
set2 = {3, 4, 5, 6}  print(set1 | set2)  # 并集: {1, 2, 3, 4, 5, 6}  
print(set1 & set2)  # 交集: {3, 4}  
print(set1 - set2)  # 差集: {1, 2}  
print(set1 ^ set2)  # 對稱差集: {1, 2, 5, 6}

3.4、集合的其他方法

  • isdisjoint(other):如果兩個集合沒有交集,則返回 True。
  • issubset(other) 或 <=:如果集合是另一個集合的子集,則返回 True。
  • issuperset(other) 或 >=:如果集合是另一個集合的超集,則返回 True。
  • update(*others):用其他集合的元素更新集合,即求并集后賦值給原集合。
  • clear():移除集合中的所有元素。

集合是Python中一個非常有用的數據結構,它提供了快速的去重和集合運算功能。

4、集合和list的區別

集合(Set)和列表(List)是Python中兩種不同類型的數據結構,它們之間存在多個顯著的區別。以下是集合和列表之間區別的清晰歸納:

4.1 有序性

  • 列表(List):列表中的元素是有序的,即元素按照它們被插入的順序進行存儲。這意味著你可以通過索引(位置)來訪問列表中的元素。
  • 集合(Set):集合中的元素是無序的,即元素存儲的順序是不確定的。因此,你不能通過索引來訪問集合中的元素。

4.2 唯一性

  • 列表(List):列表中的元素可以重復,即列表中可以有多個相同的元素,每個元素都有一個唯一的索引。
  • 集合(Set):集合中的元素是唯一的,不允許有重復的元素。如果嘗試向集合中添加一個已經存在的元素,該操作將不會改變集合。

4.3 表示方式

  • 列表(List):列表使用方括號 [] 來定義,元素之間用逗號分隔。例如:my_list = [1, 2, 2, 3, 4]。
  • 集合(Set):集合使用大括號 {} 來定義(但注意空集合不能使用 {},因為這會創建一個空字典,應該使用 set())。元素之間也用逗號分隔。例如:my_set = {1, 2, 3, 4}(注意集合會自動去除重復元素)。

4.4 用途

  • 列表(List):列表適合用于存儲有序的、可能會重復的元素。它可以用于多種場景,如存儲數據、快速訪問數據(通過索引)、修改數據等。
  • 集合(Set):集合適合用于存儲無序的、不重復的元素。它主要用于去重和集合運算(如并集、交集、差集和對稱差集)。由于集合中的元素是唯一的,它還可以用于成員關系測試。

4.5 性能

  • 列表(List):列表在插入和刪除元素時,特別是在列表的開頭或中間插入元素時,可能需要移動其他元素,因此性能可能不是最優的。
  • 集合(Set):集合基于哈希表實現,因此在進行成員關系測試、添加和刪除元素時通常具有更好的性能。但是,由于集合是無序的,因此不支持索引訪問,這可能會影響某些操作的性能。

總結

  • 列表(List)是一種有序的數據結構,可以包含重復元素,適用于需要保持順序和允許重復元素的情況。
  • 集合(Set)是一種無序的、不包含重復元素的數據結構,適用于需要快速查找元素和去除重復元素的情況。
  • 這兩種數據結構各有優缺點,選擇哪種取決于你的具體需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38321.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38321.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38321.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

gin-vue -admin 初始化安裝后 進入 后臺首頁報錯

報錯原因&#xff1a; 因為 我是使用的phpstudy 小皮的數據庫 默認的是MySam 的引擎 mysql 引擎需要是 innoDB 解決辦法 &#xff1a; 在linux 的環境下 配置一個數據庫 &#xff0c; 我是用的是vmware 虛擬機

深入理解分布式搜索引擎 ElasticSearch,并能基于 ELK+Kafka 搭建分布式?志收集系統

Elasticsearch是一個基于Lucene的分布式、多租戶能力的全文搜索引擎。它提供了RESTful web接口和分布式多用戶能力的全文搜索引擎&#xff0c;基于Apache許可證發行。以下是對Elasticsearch的深入理解以及如何基于ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;加…

npm緩存深度解析:理解、使用與清除指南

&#x1f31f; npm緩存深度解析&#xff1a;理解、使用與清除指南 npm&#xff08;Node Package Manager&#xff09;是JavaScript編程語言的包管理器&#xff0c;廣泛用于Node.js應用程序。它不僅幫助我們安裝和管理項目依賴&#xff0c;還擁有一個強大的緩存機制來加速這一過…

[論文筆記] BlendedDataset blend goes out of bounds for list 34 for valid split

報錯&#xff1a; Traceback (most recent call last):File "/mnt/cpfs/kexin/dlc_code/qwen2/Pai-Megatron-Patch/examples/qwen2/pretrain_qwen.py", line 211, in <module> (<megatron.core.datasets.gpt_dataset.GPTDataset object at 0x7f491886bf10&…

《昇思25天學習打卡營第8天|CarpeDiem》

《昇思25天學習打卡營第8天|CarpeDiem》 模型訓練構建數據集定義神經網絡模型定義超參、損失函數和優化器超參損失函數優化器 訓練與評估 打卡 今天是昇思25天學習打卡營的第8天&#xff0c;終于迎來 模型訓練 的部分了&#xff01;&#xff01;&#xff01; 興奮 發癲 模型訓…

SSH遠程命令執行漏洞(CVE-2024-6387)驗證

0x01、漏洞名稱 OpenSSH遠程代碼執行漏洞 &#xff08;CVE-2024-6387&#xff09; 0x02、漏洞簡介 ? OpenSSH是SSH&#xff08;Secure SHell&#xff09;協議的開源實現&#xff0c;它通過不安全的網絡在兩個不受信任的主機之間提供安全的加密通信。OpenSSH 廣泛用于基于Un…

數據庫。

數據庫安全性 論述題5’ 編程題10’ sql語言實現權限控制 一、概述 1、不安全因素 &#xff08;1&#xff09;?授權對數據庫的惡意存取和破壞 &#xff08;2&#xff09;數據庫中重要的數據泄露 &#xff08;3&#xff09;安全環境的脆弱性 2、?主存取控制?法 gr…

【ajax實戰06】進行文章發布

本文章目標&#xff1a;收集文章內容&#xff0c;并提交服務器保存 一&#xff1a;基于form-serialize插件收集表單數據 form-serialize插件僅能收集到表單數據&#xff0c;除此之外的數據無法收集到 二&#xff1a;基于axios提交到服務器保存 三&#xff1a;調用alert警告…

基于KMeans的航空公司客戶數據聚類分析

&#x1f490;大家好&#xff01;我是碼銀~&#xff0c;歡迎關注&#x1f490;&#xff1a; CSDN&#xff1a;碼銀 公眾號&#xff1a;碼銀學編程 實驗目的和要求 會用Python創建Kmeans聚類分析模型使用KMeans模型對航空公司客戶價值進行聚類分析會對聚類結果進行分析評價 實…

Linux修煉之路之進程概念,fork函數,進程狀態

目錄 一&#xff1a;進程概念 二&#xff1a;Linux中的進程概念 三&#xff1a;用getpid(),getppid()獲取該進程的PID,PPID 四&#xff1a;用fork()來創建子進程 五&#xff1a;操作系統學科的進程狀態 六&#xff1a;Linux中的進程狀態 接下來的日子會順順利利&#xf…

【區塊鏈+基礎設施】深證金融區塊鏈平臺 | FISCO BCOS應用案例

作為數據交換密集型行業&#xff0c;資本市場是區塊鏈創新應用的重要領域&#xff0c;區塊鏈技術可以有效解決諸多痛點問題。比 如&#xff0c;針對信息不對稱的問題&#xff0c;區塊鏈技術通過將整個企業的經營活動信息上鏈&#xff0c;有效降低盡調成本&#xff0c;為投融資決…

配置windows環境下獨立瀏覽器爬蟲方案【不依賴系統環境與chrome】

引言 由于部署瀏覽器爬蟲的機器瀏覽器版本不同&#xff0c;同時也不想因為部署了爬蟲導致影響系統瀏覽器數據&#xff0c;以及避免爬蟲過程中遇到的chrome與webdriver版本沖突。我決定將特定版本的chrome瀏覽器與webdriver下載到項目目錄內&#xff0c;同時chrome_driver在初始…

我使用 GPT-4o 幫我挑西瓜

在 5 月 15 日&#xff0c;OpenAI 旗下的大模型 GPT-4o 已經發布&#xff0c;那時網絡上已經傳開&#xff0c; 但很多小伙伴始終沒有看到 GPT-4o 的體驗選項。 在周五的時候&#xff0c;我組建的 ChatGPT 交流群的伙伴已經發現了 GPT-4o 這個選項了&#xff0c;是在沒有充值升…

NSSCTF-Web題目21(文件上傳-phar協議、RCE-空格繞過)

目錄 [NISACTF 2022]bingdundun~ 1、題目 2、知識點 3、思路 [FSCTF 2023]細狗2.0 4、題目 5、知識點 6、思路 [NISACTF 2022]bingdundun~ 1、題目 2、知識點 文件上傳&#xff0c;phar偽協議 3、思路 點擊upload&#xff0c;看看 這里提示我們可以上傳圖片或壓縮包&…

應對.Kastaneya勒索病毒:保護您的數據安全

導言&#xff1a; 隨著科技的發展&#xff0c;網絡安全問題也日益嚴峻。最近&#xff0c;一種名為.Kastaneya的勒索病毒開始在網絡上出現&#xff0c;對用戶的計算機和數據造成嚴重威脅。本文91數據恢復將介紹.Kastaneya勒索病毒的特點及其傳播方式&#xff0c;并提供一些有效…

Unity 解包工具(AssetStudio/UtinyRipper)

文章目錄 1.UtinyRipper2.AssetStudio 1.UtinyRipper 官方地址&#xff1a; https://github.com/mafaca/UtinyRipper/ 下載步驟&#xff1a; 2.AssetStudio 官方地址&#xff1a; https://github.com/Perfare/AssetStudio 下載步驟&#xff1a;

【HarmonyOS NEXT】鴻蒙多線程Sendable開發

非共享模塊在同一線程內只加載一次&#xff0c;在不同線程間會加載多次&#xff0c;單例類也會創建多次&#xff0c;導致數據不共享&#xff0c;在不同的線程內都會產生新的模塊對象。 基礎概念 Sendable協議 Sendable協議定義了ArkTS的可共享對象體系及其規格約束。符合Sen…

STM32mp157aaa按鍵中斷實驗

效果圖&#xff1a; 源碼&#xff1a; #include "key.h" void hal_key1_rcc_gpio_init() {// 使能GPIOF組RCC->MP_AHB4ENSETR | (0x1 << 5);// 設置引腳位輸入模式GPIOF->MODER & (~(0X3 << 18));GPIOF->MODER & (~(0X3 << 16))…

[C++11] 退出清理函數(quick_exit at_quick_exit)

說明&#xff1a;在C11中&#xff0c;quick_exit和at_quick_exit是新增的快速退出功能&#xff0c;用于在程序終止時提供一種快速清理資源的方式。 quick_exit std::quick_exit函數允許程序快速退出&#xff0c;并且可以傳遞一個退出狀態碼給操作系統。與std::exit相比&#…

[今日一水]論壇該如何選擇

想要搭建一個論壇其實選擇是很多的&#xff0c;就比如國內的dz&#xff0c;國外的xenforo和flarum&#xff0c;具體還是根據的面向的用戶和需求來&#xff0c;就比如flarum它的界面肯定是三個論壇里最現代化的&#xff0c;但是xenforo社區生態很強&#xff0c;而dz對于國內用戶…