欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中元組的概念及應(yīng)用小結(jié)

 更新時(shí)間:2023年01月31日 09:37:16   作者:Jiangxl~  
Python中的元組和列表很相似,元組也是Python語言提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu)之一,可以在代碼中直接使用,這篇文章主要介紹了Python中元組的概念以及應(yīng)用,需要的朋友可以參考下

1.元組的概念

Python中的元組和列表很相似,元組也是Python語言提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu)之一,可以在代碼中直接使用。

元組和列表就像是一個(gè)孿生兄弟,表現(xiàn)形式和使用上都大差不差,但是兩者又有非常明顯的區(qū)別:

  • 元組是用小括號(hào)表示的,列表的小括號(hào)還可以直接省略,而列表是使用中括號(hào)表示的,列表的中括號(hào)必須存在。
  • 元組的對(duì)象是不可變類型的,也就是說,一旦定義了元組,元組中的數(shù)據(jù)時(shí)不能進(jìn)行更改的。
  • 列表中的對(duì)象是可變類型的,定義了列表之后,可以對(duì)列表中的數(shù)據(jù)進(jìn)行增刪改。

一個(gè)元組中也會(huì)定義很多個(gè)數(shù)據(jù)元素,每個(gè)數(shù)據(jù)元素也都可以通過索引的方式獲取,也有正數(shù)、負(fù)數(shù)索引一說。

當(dāng)一個(gè)元組中的數(shù)據(jù)元素是一個(gè)列表時(shí),對(duì)于元素是不允許修改的,但是元素中列表的數(shù)據(jù)時(shí)可以被修改的,有種多維列表的概念,這個(gè)列表在元組中相當(dāng)于一個(gè)子列表,這種情況在下面的操作中會(huì)進(jìn)行演示。

問題來了,既然元組和列表那么的相似,為什么還要設(shè)計(jì)元組這種數(shù)據(jù)結(jié)構(gòu)呢?

其實(shí)也并不難理解,元組的對(duì)象是不可變類型的,一旦創(chuàng)建了元組這種不可變類型的對(duì)象,對(duì)象中的所有數(shù)據(jù)將不能修改,也能夠避免由于修改數(shù)據(jù)從而引發(fā)的Bug錯(cuò)誤,此外,對(duì)于不可變類型的對(duì)象值,在多并發(fā)的環(huán)境下是不需要加鎖的,因?yàn)樗臄?shù)據(jù)不可能會(huì)被改變,因此多并發(fā)的時(shí)候就不需要加鎖,從而避免并發(fā)1修改了數(shù)據(jù)并發(fā)2依舊是舊數(shù)據(jù)。

因此在程序中我們也要盡量使用不可變類型的對(duì)象。

當(dāng)元組中存在一個(gè)列表對(duì)象時(shí),為什么列表中的元素可以被修改?不是說元組的對(duì)象是不可變類型嗎?

因?yàn)橐粋€(gè)元組中有很多個(gè)元素,列表呢只屬于其中的一個(gè)元素,對(duì)應(yīng)一個(gè)索引,對(duì)于元組而言存儲(chǔ)的是引用元素所在內(nèi)存中的地址,存儲(chǔ)引用的內(nèi)存地址是不會(huì)被改變的,也就意味著元組中的元素定義好之后,不能再添加、刪除元組中的對(duì)象元素,但是列表只是元組中的一個(gè)元素,即使修改列表的數(shù)據(jù)也不會(huì)對(duì)元組中的對(duì)象元素有改動(dòng),根據(jù)列表的特點(diǎn)以及列表有自己的數(shù)據(jù)結(jié)構(gòu),就可以對(duì)元組中元素為列表的對(duì)象進(jìn)行修改。

2.元組的基本使用

在前面說了那么多的理論,例如元組用小括號(hào)表示,元組的特性等等,在本小結(jié),我們通過案例來是驗(yàn)證。

2.1.定義一個(gè)元組

元組用小括號(hào)定義。

#定義一個(gè)元組
mytuple = ("jiangxl", 123, "python")
print(mytuple)

#輸出結(jié)果:('jiangxl', 123, 'python')

定義元組時(shí)小括號(hào)可以省略。

mytuple = "jiangxl", 123, "python"
print(mytuple)

#輸出結(jié)果:('jiangxl', 123, 'python')

image-20220731111547171

2.2.定義一個(gè)空元組

可以使用()表示一個(gè)空元組,也可以使用tuple()函數(shù)定義一個(gè)空元組

mytuple = ()
print(mytuple)

print(tuple())

image-20220731111933582

2.3.元組的元素是不可變的

元組中的對(duì)象元素是不可變的,已定義好的元組,其中的元素是不能被修改的,如下所示:

mytuple = ("jiangxl", 123, "python")

#嘗試修改索引為1的元素
mytuple[1] = 678

直接回拋出錯(cuò)誤:TypeError: ‘tuple’ object does not support item assignment

image-20220731113740690

2.4.當(dāng)元組中的元素是一個(gè)列表時(shí)列表中的元素可變

當(dāng)一個(gè)元組中的元素是一個(gè)列表時(shí),這個(gè)列表相當(dāng)于元組的一個(gè)元素,面向一個(gè)索引,此時(shí)這個(gè)列表相當(dāng)于多維列表中子列表的概念,有自己的索引分布,因此當(dāng)元組中的元素是列表時(shí),這個(gè)列表中的元素可以改變。

元組會(huì)存儲(chǔ)元素在內(nèi)存中的地址,這個(gè)地址是不能被修改的,因此可以保證元素在元組中不會(huì)改變,但是列表是元組中的一個(gè)元素,這個(gè)元素對(duì)象不變就可以,至于元素中的元素就受列表的特性控制了。

#定義一個(gè)元組,其中索引1對(duì)應(yīng)的元素是[1, 2, 3]列表
mytuple2 = ("jiangxl", [1, 2, 3], "python")

#修改[1, 2, 3]列表中1元素為123
'''
    首先找到[1, 2, 3]列表所在元組中的元素對(duì)應(yīng)的索引:mytuple2[1]
    然后在找到元素1對(duì)應(yīng)在列表中的索引:mytuple2[1][0]
'''
mytuple2[1][0] = 123

#打印元組的內(nèi)容觀察是否被修改
print(mytuple2)

#輸出結(jié)果:('jiangxl', [123, 2, 3], 'python')

2.5.當(dāng)元組中只定義一個(gè)元素時(shí)的注意事項(xiàng)

當(dāng)在元素中只定義一個(gè)元素時(shí),有一些注意事項(xiàng),即使是只定義一個(gè)元素,也要在元組中至少包含一個(gè)逗號(hào),否則Python就認(rèn)為我們定義的并非是元組,只是一個(gè)字符串。

1)定義元組中只有一個(gè)元素且不加逗號(hào)

當(dāng)定義的元組中只有一個(gè)元素時(shí),并且沒有加逗號(hào),此時(shí)Python認(rèn)為這并不是一個(gè)元組,只是一個(gè)字符串,()括號(hào)也被認(rèn)為是數(shù)學(xué)中的括號(hào)。

#元組中只有一個(gè)元素,且不添加逗號(hào)
mytuple = ("jiangxl")

#打印這個(gè)元組中的元素
print(mytuple)
#輸出結(jié)果:jiangxl

#竟然只輸出了一個(gè)字符串,并不是元組的形式,我們打印這個(gè)數(shù)據(jù)的類型
print(type(mytuple))
#輸出結(jié)果:<class 'str'>
#發(fā)現(xiàn)只是一個(gè)字符串類型,并不是元組

2)定義元組中只有一個(gè)元素且加逗號(hào)

在元組()中只要有一個(gè)逗號(hào),Python就認(rèn)為這是一個(gè)元組。

mytuple = ("jiangxl",)

image-20220731133302282

3.列表的所有操作同樣適用于元組

元組和列表很類似,幾乎一樣,只不過元組是不可變的類型,列表能實(shí)現(xiàn)的操作,也同樣適用于元組。

理論就不再敘說了,不明白的去看前面列表這類操作的理論,說的非常明白了。

1)元組的切片

#元組的切片
mytuple = ("jiangxl", 123, "python", 111, 22, 45, "abc")
print(mytuple[1:4])                 

#輸出結(jié)果; (123, 'python', 111)

2)查詢?cè)M中某個(gè)元素的索引

#查詢?cè)M中某個(gè)元素的索引
mytuple = ("jiangxl", 123, "python", 111, 22, 45, "abc")
print(mytuple.index(123))           

#輸出結(jié)果;1

3)使用乘法運(yùn)算符操作列表

#使用乘法運(yùn)算符操作列表
mytuple = ("jiangxl", 123, "python", 111, 22, 45, "abc")
mytuple2 = mytuple * 2
print(mytuple2)     

#輸出結(jié)果:('jiangxl', 123, 'python', 111, 22, 45, 'abc', 'jiangxl', 123, 'python', 111, 22, 45, 'abc')

4)使用加法運(yùn)算符操作列表

#使用加法運(yùn)算符操作列表
mytuple3 = ("abc", "k8s", "jenkins")
mytuple4 = (123, 456, 789, 111)
print(mytuple3 + mytuple4)         

#輸出結(jié)果:('abc', 'k8s', 'jenkins', 123, 456, 789, 111)

5)元組之間的比較

元組的比較也是基于元組中的所有元素都是數(shù)字的情況下,才能進(jìn)行比較。

#元組的比較
mytuple5 = (1, 2, 3, 4)
mytuple6 = (1, 2, 5, 8, 9)
print(mytuple5 < mytuple6)

#輸出結(jié)果:True

6)元組的反轉(zhuǎn)

元組是不可變的類型,不能通過方法reverse實(shí)現(xiàn)元組的反轉(zhuǎn),因?yàn)檎{(diào)用類方法會(huì)修改元組本身的元素,所以只能通過reversed函數(shù)實(shí)現(xiàn)反轉(zhuǎn)。

mytuple = ("jiangxl", 123, "python", 111, 22, 45, "abc")
print(list(reversed(mytuple)))            

#輸出結(jié)果:['abc', 45, 22, 111, 'python', 123, 'jiangxl']

7)元組的排序

元組是不可變的類型,不能通過方法sort實(shí)現(xiàn)元組排序,因?yàn)檎{(diào)用類方法會(huì)修改元組本身的元素,所以只能通過sorted函數(shù)實(shí)現(xiàn)排序。

元組進(jìn)行排序時(shí),如果元組中存在字符串類型的元素,那么其他所有的元素?zé)o論什么類型,都需要單獨(dú)用引號(hào)引起來,否則不能排序,會(huì)拋出錯(cuò)誤。

mytuple = (1, 2, 5, 8, 9)
##升序
print(sorted(mytuple))                      
#輸出結(jié)果:[1, 2, 5, 8, 9]

##降序
print(sorted(mytuple, reverse=True))            
#輸出結(jié)果:[9, 8, 5, 2, 1]

4.就是想修改元組中的某個(gè)元素

元組的對(duì)象是不可變類型的,不允許增、刪、改,但是我們就是想改元組的對(duì)象元素,也是有辦法的。

  • 重新聲明元組,對(duì)元素進(jìn)行增刪改
  • 使用切片截取元組中需要的元素,然后是還有加法運(yùn)算符拼接新的對(duì)象元素。

第一種方法無需演示,懂得都會(huì),重點(diǎn)看第二種方法。

這種方法的核心思想就是:利用切片(保留元組中想要的元素)+拼接(將多個(gè)切片的元組合并)的方式即可對(duì)元組中的元素改變。

需求:

? (“jiangxl”, 123, “python”, 111, 22, 45, “abc”)

有一個(gè)元組,對(duì)象元素如上所示,我想刪掉元組中的“22”和“45”這兩個(gè)對(duì)象元素。

實(shí)現(xiàn)思路:

  • 我們都知道元組是不可變的類型,不允許修改其中的元素,但是我們就要反其道而行之,運(yùn)用所學(xué)的知識(shí)實(shí)現(xiàn)這個(gè)需求。
  • 想刪掉元組中的“22”和“45”這兩個(gè)對(duì)象元素,可以使用切片的方式將這兩個(gè)元素之外的元素從列表中切出來。
  • 由于這兩個(gè)元素前后都有其他元素,一個(gè)切片截取22元素之前的其他元素,一個(gè)切片截取45元素之后的其他元素。
  • 最后通過加法運(yùn)算符將兩個(gè)切片合并在一起,形成一個(gè)新的元組,此時(shí)這個(gè)元組中就不包含22”和“45”這兩個(gè)對(duì)象元素。通過切片+拼接的方法就可以將元組中的元素進(jìn)行刪除操作,如果是修改也是同樣的方法:切片+拼接。

代碼如下:

#定義初始元組
'''
    定義好初始元組后,突然想修改元組中的元素了,但是又不想去調(diào)整初始元組,故而通過切片+拼接的方法產(chǎn)生一個(gè)新的元組,也就相當(dāng)于對(duì)元組的元素進(jìn)行改變了。
    需求:刪掉元組中的“22”和“45”這兩個(gè)對(duì)象元素
'''
mytuple = ("jiangxl", 123, "python", 111, 22, 45, "abc")


'''
    使用切片截取22元素之前的其他元素,無需指定起始索引,從第一個(gè)元素處開始截取,指定結(jié)束索引為4
    索引4是元素22的索引,指定結(jié)束元素是4,結(jié)束元素不會(huì)被納入切片
'''
mytuplestart = mytuple[:4]

'''
    22元素之前的全部元素都截取出來后,還要對(duì)45之后的元素進(jìn)行截取,因?yàn)槲覀冎皇遣幌胍?2和45了,45之后還有其他的元素
    指定開始索引為6,索引為6的元素是abc,完美避開了22和45這兩個(gè)元素,不指定結(jié)束索引,一直切片到最后一個(gè)元素
'''
mytuolestop = mytuple[6:]

'''
    使用加法運(yùn)算符將兩個(gè)切片拼接在一起,形成新的元組
'''
mytuplenew = mytuplestart + mytuolestop
print(mytuplenew)

#輸出結(jié)果:('jiangxl', 123, 'python', 111, 'abc')

到此這篇關(guān)于Python中元組的概念以及應(yīng)用的文章就介紹到這了,更多相關(guān)Python中元組概念內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論