Python學習日記(四) 集合和元祖

来源:https://www.cnblogs.com/Fantac/archive/2019/07/26/11247911.html
-Advertisement-
Play Games

元祖的特性:是一個只讀列表、可以迴圈、可以切片,修改數據遵循'兒子'不能改但'孫子'可能可以改。 iterable:可迭代對象(元祖、列表、字串、集合) 元祖宣告方式: 元祖索引切片: 查: tu.index(): 通過元素找索引,可以切片,找到該元素則返回第一個元素索引值,找不到則報錯 tu.co ...


元祖的特性:是一個只讀列表、可以迴圈、可以切片,修改數據遵循'兒子'不能改但'孫子'可能可以改。

iterable:可迭代對象(元祖、列表、字串、集合)

元祖宣告方式:

tu = (1,2,3,['a','b',1],'str') #(1, 2, 3, ['a', 'b', 1], 'str')

元祖索引切片:

tu = (1,2,3,['a','b',1],'str') #(1, 2, 3, ['a', 'b', 1], 'str')
print(tu[1])    #2
print(tu[-2])   #['a', 'b', 1]
print(tu[1:3])  #(2, 3)
print(tu[-1:2:-1]) #('str', ['a', 'b', 1])
print(tu[::1])  #(1, 2, 3, ['a', 'b', 1], 'str')
print(tu[::-2]) #('str', 3, 1)

查:

for i in tu:
    print(i)
#1
#2
#3
#['a', 'b', 1]
#str

tu.index():

通過元素找索引,可以切片,找到該元素則返回第一個元素索引值,找不到則報錯

print(tu[::-2].index(3))    #1
print(tu.index(['a','b',1]))    #3

tu.count():

tu = (1,2,3,['a','b',1],'str',2,2) 
print(tu.count(2))  #3

len(tu):

tu = (1,2,3,['a','b',1],'str',2,2) 
print(len(tu))  #7

改:

因為元祖為只讀列表裡面的數據不能改動,但是其子元素內部的元素可能可以改動。

tu =((1,2,'a'),['a','b',1],'a',1,{1,2})
tu[0][2] = 'z' print(tu) #'tuple' object does not support item assignment tu[1][2] = 'z' print(tu) #((1, 2, 'a'), ['a', 'b', 'z'], 'a', 1, {1, 2}) tu[2] = 'z' print(tu) #'tuple' object does not support item assignment tu[3] = 1 print(tu) #'tuple' object does not support item assignment tu[4][0]= 5 print(tu) #'set' object does not support item assignment

 

 

 

集合的特性:集合本身是一個可變的數據類型,但其中的元素是不可變的數據類型。它也有著無序、不重覆的特點。

把一個列表轉成集合就可以做到去重覆的效果。

集合宣告方式:

當創建一個空集合時要用set(),不能用{ }

 

a = set()   #set()
b = set({1,'a',False,'a'})  #{False, 1, 'a'}
c = {1,2,'a','c','c'}  #{1, 2, 'c', 'a'}

 

增:

set.add():

將元素無序的添加至集合中,若該元素已存在則不進行任何操作

a = set({1,2,3,'a',(1,2)})
a.add(1)
print(a)        #{(1, 2), 1, 2, 3, 'a'}

a.add('ab')
print(a)        #{(1, 2), 1, 2, 3, 'ab', 'a'}

set.update():

將元素迭代並無序加入以逗號隔開

a = set({1,2,3,'a',(1,2)})
a.update('abc')     #{(1, 2), 1, 2, 3, 'b', 'c', 'a'}
a.update({'key1' : 12,'key2' : 'c','key3' : 0})     #{(1, 2), 1, 2, 3, 'key2', 'key3', 'key1', 'a'}
a.update([6,5])     #{(1, 2), 1, 2, 3, 5, 6, 'a'}
a.update((1,9,'a')) #{(1, 2), 1, 2, 3, 9, 'a'}
a.update(set({5,6})) #{(1, 2), 1, 2, 3, 5, 6, 'a'}

刪:

set.pop():

隨機刪除集合中的一個元素,並返回結果

a = set({1,2,3,'a',(1,2)})
print(a.pop())  #(1, 2)

b = set()
print(b.pop())  #'pop from an empty set'

set.remove():

在集合中刪除一個元素,如果元素不存在則返回錯誤

a = set({1,2,3,'a',(1,2)})
a.remove(1) 
print(a)    #{(1, 2), 2, 3, 'a'}
a.remove(1)
print(a)    #KeyError: 1

set.clear():

清空整個集合

a = set({1,2,3,'a',(1,2)})
a.clear()
print(a)    #set()

del:

刪除該集合

a = set({1,2,3,'a',(1,2)})
del a
print(a)    #name 'a' is not defined

set.discard():

移除集合中的某個元素,若果元素不存在則不會報錯

a = set((1,'a',5))
a.discard(1)    #{5, 'a'}
print(a)

b = set(((1,'a',5),2))
b.discard(1)    #{2, (1, 'a', 5)}
print(b)

改:

因為集合內部為不可變數據類型所以無法修改其中的元素。

查:

 

a = {1,2,'a',False,'abc'}
for i in a:
    print(i)
#False
#1
#2
#abc
#a

 

求交集:

交集定義:集合論中,設AB是兩個集合,由所有屬於集合A且屬於集合B的元素所組成的集合,叫做集合A與集合B的交集(intersection),記作AB。

a = {1,2,3,4}
b = {2,4,5,6}
print(a & b)    #{2, 4}
print(a.intersection(b))    #{2, 4}

 

求並集:

並集定義:給定兩個集合A,B,把他們所有的元素合併在一起組成的集合,叫做集合A與集合B的並集,記作A∪B。

a = {1,2,3,4}
b = {2,4,5,6}
print(a | b)    #{1, 2, 3, 4, 5, 6}
print(a.union(b))   #{1, 2, 3, 4, 5, 6}

求反交集:

 

a = {1,2,3,4}
b = {2,4,5,6}
print(a ^ b)    #{1, 3, 5, 6}
print(a.symmetric_difference(b))    #{1, 3, 5, 6}

 

求差集:

就是找前面一個集合獨有的

a = {1,2,3,4}
b = {2,4,5,6}
print(a - b)    #{1, 3}
print(a.difference(b))  #{1, 3}
print(b - a)    #{5, 6}
print(b.difference(a))  #{5, 6}

判斷是否為子集:

若原集合中的所有元素都包含在指定集合中,返回True,否則返回False

a = {1,2,3}
b = {'a',1,2,3,4,5,6}
print(a < b)    #True
print(a.issubset(b))    #True

判斷是否為超集:

判斷指定集合中的元素是否包含在原集合中,有則返回True,否則返回False

 

a = {1,2,3}
b = {'a',1,2,3,4,5,6}
print(b > a)    #True
print(b.issuperset(a))    #True

 

 

其他:

1.將列表中的元素去重覆成一個新的列表(不考慮演算法)

a = [1,2,2,33,33,5,6,7,'a','b','a']
a = list(set(a))
print(a)    #[1, 2, 33, 'b', 5, 6, 7, 'a']

2.將set()轉變為不可變數據類型

a = set({1,2,'a'})
b = {5,7,a}
print(b)    #unhashable type: 'set'
a = set({1,2,'a'})
a = frozenset(a)    
print(a,type(a))    #frozenset({1, 2, 'a'}) <class 'frozenset'>
b = {a,4,5}
print(b)    #{4, 5, frozenset({1, 2, 'a'})}

3.什麼元素轉化為布爾值為False?

0、[]、()、{}、set()、' '

4.數字和元祖

tu1 = ((100))
tu2 = ((100,))
print(tu1,type(tu1))    #100 <class 'int'>
print(tu2,type(tu2))    #(100,) <class 'tuple'>

元祖裡面只有一個元素且不加逗號,那麼此元素是什麼類型就是什麼類型

5.當for迴圈刪除列表中元素時都會產生一個新的列表

li = [1,2,3,4,5,6]
for i in range(len(li)):
    del li[i]
    print(li)

#第一次刪除 i = 0,對應索引值 li[i] = 1,刪除後列表 li = [2, 3, 4, 5, 6]
#第二次刪除 i = 1,對應索引值 li[i] = 3,刪除後列表 li = [2, 4, 5, 6]
#第三次刪除 i = 2,對應索引值 li[i] = 5,刪除後列表 li = [2, 4, 6]
#第四次刪除 i = 3,報錯 因為到這時候列表的長度是3,小於元素的索引值

將奇數位的數刪除:

方法一

li = [1,2,3,4,5,6]
li = li[::2]
print(li)

方法二

li = [1,2,3,4,5,6]
l1 = []
for i in li:
    if li.index(i) % 2 == 0:
        l1.append(i)
li = l1
print(li)   #[1, 3, 5]

6.在遍歷一個字典時,不能刪除它的鍵值對

若要刪除字典中含'k'的元素:

dic = {'key1' : 2,
       'key2' : 3,
       'key3' : 'a',
       'aey4' : 5}
for i in dic:
    if 'k' in i:
        del dic[i]  #RuntimeError: dictionary changed size during iteration

解決方案:

方法一:

dic1 = {}
for i in dic:
    if 'k' not in i:
        dic1.setdefault(i,dic[i])
dic = dic1
print(dic)  #{'aey4': 5}

方法二:

l = []
for i in dic:
    if 'k' in i:
        l.append(i)
for i in l:
    del dic[i]
print(dic)  #{'aey4': 5}

 


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

-Advertisement-
Play Games
更多相關文章
  • Bearer認證 HTTP提供了一套標準的身份驗證框架:伺服器可以用來針對客戶端的請求發送質詢(challenge),客戶端根據質詢提供身份驗證憑證。質詢與應答的工作流程如下:伺服器端向客戶端返回401(Unauthorized,未授權)狀態碼,併在WWW Authenticate頭中添加如何進行驗 ...
  • 前言 Bridge設計模式,將一個複雜類分成可以單獨開發的部分。分成的兩個部分,abstraction,implementation。字面上是抽象和實現,但不同於抽象方法及其實現。下麵摘錄Wiki的兩句話。 decouple an abstraction from its implementatio ...
  • 前言 上一節我們學習了單一職責原則,簡單來說就是各司其職,廚師就專註做好菜,不要跑到前堂做起小二。 但是呢,萬事無一絕對。如果只是小飯店有時候也不是特別嚴格。還是那句話, 原則是死的,人是活的 。 接下來我們來學習介面隔離原則。 基本介紹 客戶端不應該依賴它不需要的介面,即一個類對另一個類的依賴應該 ...
  • 1.智能快遞櫃(開篇) 2.智能快遞櫃(終端篇) 3.智能快遞櫃(通信篇-HTTP) 4.智能快遞櫃(通信篇-SOCKET) 5.智能快遞櫃(通信篇-Server程式) 6.智能快遞櫃(平臺篇) 7.智能快遞櫃(APP及微信公眾號) 8.智能快遞櫃SDK(聯網型鎖板) 9.智能快遞櫃SDK(串口型鎖 ...
  • 架構雜談《七》 容器VS虛擬機 一、什麼是虛擬機 虛擬機(Virtual Machine)指通過軟體模擬的具有完整硬體系統功能的、運行在一個完全隔離環境中的完整電腦系統。 虛擬系統通過生成現有操作系統的全新虛擬鏡像,它具有真實windows系統完全一樣的功能,進入虛擬系統後,所有操作都是在這個全新 ...
  • 前言 前陣子面試的時候,有個面試官問我瞭解哪些設計模式嗎?我說了策略模式。接著他問有哪些場景應用,我又回答他jdk的集合工具類有個排序方法就用到了策略模式,也就是java.util包下的Collections類,該類中有個 方法,我們可以自定義排序規則實現集合的定製排序,這就是策略模式最直接的應用, ...
  • java網上線上支付實戰視頻java網上線上支付實戰視頻java網上線上支付實戰視頻java網上線上支付實戰視頻java網上線上支付實戰視頻java網上線上支付實戰視頻java網上線上支付實戰視頻java網上線上支付實戰視頻 下載地址 ...
  • 音樂下載器目前支持所有主流平臺 下載地址 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...