數據類型--集合

来源:http://www.cnblogs.com/abobo/archive/2017/12/13/8035235.html
-Advertisement-
Play Games

數據類型的種類 常用的:1、數字2、字元串3、列表4、元祖5、集合 不常用的:隊列有序字典預設字典 集合的特點 1、無序 2、去重(重要) 3、可嵌套 4、關係測試(重要) 創建集合 一、創建集合的註意事項: 1、無序,不重覆的序列 2、用“{}”來代替,裡面每個元素就是一個值,跟字典的區別就是無需 ...


數據類型的種類

常用的:
1、數字
2、字元串
3、列表
4、元祖
5、集合

不常用的:
隊列
有序字典
預設字典

集合的特點

1、無序 2、去重(重要) 3、可嵌套 4、關係測試(重要)

 

創建集合

(一)、回顧:創建列表的2中方法:

1、li = []  #直接創建
2、list() #可以將其他數據類型轉換成列表(相當於在記憶體有創建一個)

註意:
     它會自動去執行list裡面的構造方法__init__。
     list __init__,內部執行for迴圈(11,22,33,44)轉換成[11,22,33,44]
     在定義  li=[]的時候,會內部調用list()這種方式。

 

一、創建集合的註意事項:

1、無序,不重覆的序列

1 set = {11,22,11,22}
2 print(set)
3 
4 輸出結果:
5 {11, 22}

2、用“{}”來代替,裡面每個元素就是一個值,跟字典的區別就是無需key:values。
3、set的功能: set()  == list() 
4、將列表轉換成集合的方法:

1 li = [11,22,11,22]
2 s1 = set(li)
3 print(s1,type(s1))
4 
5 顯示結果:
6 {11, 22} <class 'set'>

 

二、創建集合的三種方式:

1、普通創建方法:

1 1、se = {11,22} 
2 例如:se = {"123","456"}

2、創建空集合:

1 s2 = set()             
2 這個是通過__init__進行轉換的

3、轉其他數據類型換成集合

1 s3 = set([11,22,33,4])

 

操作集合

一、添元素:

1 創建空集合:
2 s = set()
3 s.add(123)
4 s.add(123)
5 s.add(123)
6 print(s)
7 
8 顯示結果:
9 {123}


註意:上面示例添加了3次123,但是只能顯示一個,因為set集合有去重功能。
擴展:爬蟲訪問過的url放到一個set()中,可以通過去重功能,過濾掉訪問過的url。

 

 

二、清空set里的所有內容:

1 s.clear()
2 print(s)
3 
4 顯示結果:
5 set()

 

 

 

 

 

三、A中存在B中不存在的

註意:

A是指誰調用的表(s1的位置),
B就是被調用的表(s2的位置);
 1 #s1中存在s2中不存在的:
 2 s1 = {11,22,33}
 3 s2 = {22,33,44}
 4 s3 = s1.difference(s2)
 5 print(s3)
 6 
 7 
 8 #s2中存在s1中不存在的
 9 s3 = s2.difference(s1)
10 print(s3)
11 
12 顯示結果:
13 {11}
14 {44}

 

 

 

四、取出A中存在,B中不存在的,然後將結果替換掉A中的元素:

1 s1.difference_update(s2)
2 print("s1:",s1)
3 
4 顯示結果:
5 s1: {11}

註意:如果後續的代碼不需要s1裡面的元素時,可以使用帶有Update方法來替換掉

 

 

五、對稱差距
把A中存在的B中不存在的取出,
在把B中存在的A中不存在的取出;

 1 s1 = {11,22,33}
 2 s2 = {22,33,44}
 3 
 4 s3 = s1.symmetric_difference(s2)
 5 print(s3)
 6 print(s1)
 7 print(s2)
 8 
 9 顯示結果:
10 {11, 44}
11 {33, 11, 22}
12 {33, 44, 22}

 

 

 

六、對稱差距更新s1

取出A中存在B中不存在的元素,
取出B中存在A中不存在的元素,
將結果更新到A中

1 s1.symmetric_difference_update(s2)
2 print("更新s1",s1)
3 
4 顯示結果:
5 更新s1 {11, 44}

註意:如果後續的代碼不需要s1裡面的元素時,可以使用帶有Update方法來替換掉

 

 

七、移除元素:

#移除指定元素,不存在不報錯:(以後推薦使用這個避免bug)
s1 = {11,22,33}
s1.discard(1111)
print("移除1111,數據不存在,不會報錯:",s1)


#移除指定元素,如果不存在就直接報錯。
s1 = {11,22,33}
s1.remove(22)
print("移除指定元素,有就不報錯:",s1)

# s1.remove(111)
# print("移除指定元素,沒有就報錯:",s1)

#移除某個元素,並獲取移除元素的值。(隨機移除,不需要加參數,因為集合是無序的)
s1 = {11,22,33,44}
ret = s1.pop() #不用加參數
print("集合無序,隨機移除,返回移除的數據",s1)
print("顯示pop移除的元素:",ret)


顯示結果:
移除1111,數據不存在,不會報錯: {33, 11, 22}
移除指定元素,有就不報錯: {33, 11}
集合無序,隨機移除,返回移除的數據 {11, 44, 22}
顯示pop移除的元素: 33

註意:使用pop的場景:以後再學到隊列的時候會使用到,一般情況下移除一個元素,然後把移除的這個元素賦值到一個變數,然後在其他引用。

 

 

八、取出A和B之間的交集:

1 s1 = {11,22,33}
2 s2 = {22,33,44}
3 s3 = s1.intersection(s2)
4 print("取出s1和s2的交集:",s3)
5 
6 
7 顯示結果:
8 取出s1和s2的交集: {33, 22}

 

 

九、取出A和B之間的交集,並更新到A里:

1 s1 = {11,22,33}
2 s2 = {22,33,44}
3 
4 s1.intersection_update(s2)
5 print("取出A和B之間的交集,並更新到A里:",s1)
6 
7 輸出結果:
8 取出A和B之間的交集,並更新到A里: {33, 22}

 

十、判斷是否為包含於被包含的關係:

 1 s1 = {11,22,33}
 2 s2 = {22,33}
 3 s3 = s1.issuperset(s2)
 4 print("s1是s2的父序列:",s3)
 5 
 6 s3 = s2.issubset(s1)
 7 print("s2是s1的子序列:",s3)
 8 
 9 
10 輸出結果:
11 s1是s2的父序列: True
12 s2是s1的子序列: True

 

 

十一、取出A和B的並集:

1 s1 = {11,22,33}
2 s2 = {22,33,44}
3 s3 = s1.union(s2)
4 print("顯示A和B的並集:",s3)
5 
6 顯示結果:
7 顯示A和B的並集: {33, 22, 11, 44}

 

 

十二、批量添加,批量更新(對可迴圈和可迭代的對象有效)

 1 #批量添加,批量更新(對可迴圈和可迭代的對象有效)
 2 s1 = {11,22,33}
 3 s1.add(44)
 4 s1.add(55)
 5 s1.add(66)
 6 print("往s1里添加記錄",s1)
 7 
 8 #eg:列表
 9 li = [11,22,3,11,2]
10 s1.update(li)
11 print("將li列表中的元素加入到s1里:",s1)
12 
13 #eg:元祖
14 tuples = (66,77,8,10,2)
15 s1.update(tuples)
16 print("將元祖加入到s1里:",s1)
17 
18 #eg:字元串
19 st = "abiao"
20 s1.update(st)
21 print("將字元串加入到s1里:",s1)
22 
23 
24 顯示結果:
25 往s1里添加記錄 {33, 66, 11, 44, 22, 55}
26 將li列表中的元素加入到s1里: {33, 66, 3, 2, 11, 44, 22, 55}
27 將元祖加入到s1里: {33, 66, 3, 2, 8, 10, 11, 44, 77, 22, 55}
28 將字元串加入到s1里: {33, 66, 3, 2, 'o', 8, 'i', 10, 11, 44, 77, 'a', 'b', 22, 55}

 

 

集合的源代碼:

  1 class set(object):
  2     """
  3     set() -> new empty set object
  4     set(iterable) -> new set object
  5      
  6     Build an unordered collection of unique elements.
  7     """
  8     def add(self, *args, **kwargs): # real signature unknown
  9         """
 10         Add an element to a set,添加元素
 11          
 12         This has no effect if the element is already present.
 13         """
 14         pass
 15  
 16     def clear(self, *args, **kwargs): # real signature unknown
 17         """ Remove all elements from this set. 清除內容"""
 18         pass
 19  
 20     def copy(self, *args, **kwargs): # real signature unknown
 21         """ Return a shallow copy of a set. 淺拷貝  """
 22         pass
 23  
 24     def difference(self, *args, **kwargs): # real signature unknown
 25         """
 26         Return the difference of two or more sets as a new set. A中存在,B中不存在
 27          
 28         (i.e. all elements that are in this set but not the others.)
 29         """
 30         pass
 31  
 32     def difference_update(self, *args, **kwargs): # real signature unknown
 33         """ Remove all elements of another set from this set.  從當前集合中刪除和B中相同的元素"""
 34         pass
 35  
 36     def discard(self, *args, **kwargs): # real signature unknown
 37         """
 38         Remove an element from a set if it is a member.
 39          
 40         If the element is not a member, do nothing. 移除指定元素,不存在不保錯
 41         """
 42         pass
 43  
 44     def intersection(self, *args, **kwargs): # real signature unknown
 45         """
 46         Return the intersection of two sets as a new set. 交集
 47          
 48         (i.e. all elements that are in both sets.)
 49         """
 50         pass
 51  
 52     def intersection_update(self, *args, **kwargs): # real signature unknown
 53         """ Update a set with the intersection of itself and another.  取交集並更更新到A中 """
 54         pass
 55  
 56     def isdisjoint(self, *args, **kwargs): # real signature unknown
 57         """ Return True if two sets have a null intersection.  如果沒有交集,返回True,否則返回False"""
 58         pass
 59  
 60     def issubset(self, *args, **kwargs): # real signature unknown
 61         """ Report whether another set contains this set.  是否是子序列"""
 62         pass
 63  
 64     def issuperset(self, *args, **kwargs): # real signature unknown
 65         """ Report whether this set contains another set. 是否是父序列"""
 66         pass
 67  
 68     def pop(self, *args, **kwargs): # real signature unknown
 69         """
 70         Remove and return an arbitrary set element.
 71         Raises KeyError if the set is empty. 移除元素
 72         """
 73         pass
 74  
 75     def remove(self, *args, **kwargs): # real signature unknown
 76         """
 77         Remove an element from a set; it must be a member.
 78          
 79         If the element is not a member, raise a KeyError. 移除指定元素,不存在保錯
 80         """
 81         pass
 82  
 83     def symmetric_difference(self, *args, **kwargs): # real signature unknown
 84         """
 85         Return the symmetric difference of two sets as a new set.  對稱差集
 86          
 87         (i.e. all elements that are in exactly one of the sets.)
 88         """
 89         pass
 90  
 91     def symmetric_difference_update(self, *args, **kwargs): # real signature unknown
 92         """ Update a set with the symmetric difference of itself and another. 對稱差集,並更新到a中 """
 93         pass
 94  
 95     def union(self, *args, **kwargs): # real signature unknown
 96         """
 97         Return the union of sets as a new set.  並集
 98          
 99         (i.e. all elements that are in either set.)
100         """
101         pass
102  
103     def update(self, *args, **kwargs): # real signature unknown
104         """ Update a set with the union of itself and others. 更新 """
105         pass
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 回顧 一、參數的種類: 1、靜態參數: (1)、普通參數:嚴格按照順序,將實際參數複製給形式參數。 (2)、預設參數:一定要放在參數列的最後(即普通參數後面)。 註意: 給預設參數傳參,會被覆蓋掉(例如:XX = OK被BB覆蓋) 預設參數一定要放到,所有參數的末尾否則報錯。 (3)、指定參數:講實 ...
  • 回顧 1、set集合的特點:去重,無序,可嵌套。2、函數:def,參數,名字,函數體,返回值。3、如果是定義函數,則函數體是不會執行的,只有在調用的時候才會執行。 參數的種類 a、普通參數:嚴格按照順序,將實際參數複製給形式參數。 b、預設參數:一定要放在參數列的最後(即普通參數後面)。 註意: 給 ...
  • 編程方法類型 1、面向對象:以類為主要思路,定義的關鍵字class 2、面向過程:以過程為主的思路,定義的關鍵字為def 3、函數式編程:(最早)以函數為主要思路,定義的關鍵字為def 註意:過程和函數的區別就是:過程沒有return 函數式編程的優勢 1、減少代碼的重覆使用: 2、方便代碼的可擴展 ...
  • 操作文件時,一般需要經歷如下步驟: 打開文件操作文件 一、打開文件: 註:python中打開文件有兩種方式,即:open(...) 和 file(...) ,本質上前者在內部會調用後者來進行文件操作,推薦使用 open。 打開文件時,需要指定文件路徑和以何等方式打開文件,打開後,即可獲取該文件句柄, ...
  • 1、引用數據類型 格式:數據類型 變數名 = new 數據類型(); 每個引用類型都有自己的功能,如何使用功能? 格式:變數.方法名,如sc.nextInt(); 接收鍵盤輸入,保證輸入的是整數,否則Exception(異常) Scanner的另外一個功能 next() 接收鍵盤輸入的字元串 ①Sc ...
  • 最近在網上找到一個逆向分析挑戰的網站,http://flare-on.com/。在這裡可以下載到該網站出的一系列的逆向分析的題目,我下載了2017年的練習,總共12道題目。最近想把這些題目的結題過程寫下來,當做一些積累吧。 第一道題目是一個網頁題目,開始就給了一個login.html文件 用文本編輯 ...
  • code: RX: 解決辦法: 將第十一行的代碼改為: ...
  • 由於工作需要。記錄了使用方法。理論等在後續補充。 本人對於selenium的理解:作為python的一個第三方庫,用於Web自動化處理的工具。 一、selenium元素定位 Selenium提供了8種定位方式。 id name class name tag name link text partia ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...