除了元組是不可變的之外,還應(yīng)有語義上的區(qū)別來指導(dǎo)它們的用法。元組是異構(gòu)數(shù)據(jù)結(jié)構(gòu)(即它們的條目具有不同的含義),而列表是同類序列。元組具有結(jié)構(gòu),列表具有順序。
在金鳳等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站建設(shè),金鳳網(wǎng)站建設(shè)費(fèi)用合理。
使用這種區(qū)別可以使代碼更加明確和易于理解。
一個(gè)示例是成對的頁和行號(hào),以成對參考書中的位置,如:
my_location = (42, 11) # page number, line number
然后,可以將其用作字典中的鍵來存儲(chǔ)有關(guān)位置的注釋。另一方面,列表可用于存儲(chǔ)多個(gè)位置。自然地,人們可能想在列表中添加或刪除位置,因此使列表可變是有意義的。另一方面,從現(xiàn)有位置添加或刪除項(xiàng)目沒有意義-因此,元組是不可變的。
在某些情況下,可能想更改現(xiàn)有位置元組中的項(xiàng)目,例如在頁面的各行中進(jìn)行迭代時(shí)。但是元組不變性迫使您為每個(gè)新值創(chuàng)建一個(gè)新的位置元組。從表面上看,這似乎很不方便,但是使用這樣的不可變數(shù)據(jù)是值類型和函數(shù)式編程技術(shù)的基石,它可以具有很多優(yōu)點(diǎn)。
官方Python文檔也提到了這一點(diǎn)
“組是不可變的,并且通常包含一個(gè)異類序列…”。
在像Haskell這樣的靜態(tài)類型語言中,元組中的值通常具有不同的類型,并且元組的長度必須固定。在列表中,所有值都具有相同的類型,并且長度不是固定的。因此區(qū)別非常明顯。
Python列表及元組的相同點(diǎn)
1. 索引相同,從左到右都為0~n-1;
2. 拼接相同,都可以用+拼接;
3. 計(jì)數(shù)相同,都使用len()函數(shù)統(tǒng)計(jì)元素個(gè)數(shù)、使用count()函數(shù)統(tǒng)計(jì)指定元素的出現(xiàn)次數(shù);
4. 都屬于有序序列;
5. 都可以使用del刪除;
6. 都可以使用*來使本身重復(fù);
7. 可以強(qiáng)制轉(zhuǎn)換且切片方法一致;
8. 都可以使用for循環(huán)來進(jìn)行元素遍歷、索引遍歷以及枚舉遍歷;
9. 使用index()方法獲取指定元素的索引;
10. 使用運(yùn)算符in測試是否包括某個(gè)元素。
Python列表及元組的不同點(diǎn)
1. 類型不同,元組類型為tuple,列表類型為lsit;
2. 修改方式不同,元組不能修改,列表可以根據(jù)索引來修改元素值;
3. 刪除方式不同,列表使用pop()等函數(shù)刪除元素,而元組不能刪除元素,只能用del刪除整個(gè)元組;
4. 查找方式不同,列表只能用Index()函數(shù)來查看,元組只能用index()函數(shù)來查看。
元組是不可變的,即元組的項(xiàng)不能被修改。元組用圓括號(hào)“()”括起來,并用逗號(hào)“,”來分隔其中的項(xiàng)。
例如,下面的元組包含了三個(gè)不同數(shù)據(jù)類型的項(xiàng):
與列表不同的是,元組一旦創(chuàng)建就不可修改,如果嘗試修改,Python解釋器會(huì)報(bào)錯(cuò):
元組是一種序列類型,因此,上一節(jié)介紹的通用序列操作元組也都支持,此處不再贅述。下面要介紹的是元組的另外一些用法或特性。
1、 創(chuàng)建元組
在創(chuàng)建元組時(shí),可以不用加圓括號(hào)(除非它是其他數(shù)據(jù)類型的一部分,如一個(gè)在列表中的元組,此時(shí)必須加圓括號(hào)):
可以使用元組的工廠函數(shù)tuple()創(chuàng)建元組。如果要?jiǎng)?chuàng)建一個(gè)空的元組,可以使用不包含任何項(xiàng)的圓括號(hào)或者是沒有參數(shù)的tuple()函數(shù):
tuple()函數(shù)也可以有參數(shù),且參數(shù)必須為可迭代對象:
創(chuàng)建只有一個(gè)項(xiàng)的元組時(shí)有個(gè)“小陷阱”,即用圓括號(hào)創(chuàng)建元組時(shí),如果括號(hào)中只有一個(gè)項(xiàng),而沒有逗號(hào),那么創(chuàng)建的并不是元組,而是這個(gè)項(xiàng)本身的類型:
創(chuàng)建只有一個(gè)項(xiàng)的元組,應(yīng)該在該項(xiàng)的后面緊跟著一個(gè)逗號(hào)(或者使用tuple()函數(shù)):
2、 嵌套元組
元組與列表一樣,可以嵌套,同樣元組中也可以包含列表:
關(guān)于Python的基礎(chǔ)問題可以看下這個(gè)網(wǎng)頁的視頻教程,網(wǎng)頁鏈接,希望我的回答能幫到你。
元組數(shù)據(jù)類型也是序列類型,和列表類型十分的相似,同樣可以根據(jù)索引來獲取元素,并且一樣可以使用切片操作,和列表的不同之處在于,元組是 不可變類型 ,一旦創(chuàng)建是無法修改里面的值的。
元組是用小括號(hào)表示,數(shù)據(jù)項(xiàng)與數(shù)據(jù)項(xiàng)之間用逗號(hào)隔開,并且對于元組中數(shù)據(jù)的類型是沒有限制的
值得注意的是當(dāng)元組中只有一個(gè)元素的時(shí)候,我們必須在末尾加逗號(hào)
之前講了列表和字符串,都可以通過索引的方式去訪問,元組也一樣,因?yàn)槿叨际切蛄蓄愋?,訪問的方式和列表、字符串的方式一樣,這里就不在闡述了
元組的內(nèi)置函數(shù)較少,并且十分簡單
1.max、min最大值和最小值函數(shù)
2.tuple將 序列類型 轉(zhuǎn)換成元組類型
以上內(nèi)容是元組中的主要內(nèi)容,后面當(dāng)我們用到的時(shí)候我們再做其他的解釋
所以這篇文章,我們先來回顧和總結(jié)Python數(shù)據(jù)結(jié)構(gòu)里常用操作。Python中常見的數(shù)據(jù)結(jié)構(gòu)可以統(tǒng)稱為容器(container)。序列(如列表和元組)、映射(如字典)以及集合(set)是三類主要的容器。而扁平序列如str、bytes、bytearray、memoryview 和 array.array等不在這篇文章的討論范圍內(nèi)。
在此,我們先從元組開始說起。
元組區(qū)別于列表的顯著特征之一就是它不能被修改,但其另外一個(gè)作用就是 用于沒有字段名的記錄 [1] 。因?yàn)楹笳呓?jīng)常被忽略,我們先來看看元組作為記錄的作用。
使用括號(hào)就可以定義一個(gè)元組。元組中的每個(gè)元素都存放了記錄中一個(gè)字段的數(shù)據(jù),外加這個(gè)字段的位置。正是這個(gè)位置信息給數(shù)據(jù)賦予了意義。下面的例子中,元組就被當(dāng)作記錄加以利用:
輸出為:
上述for循環(huán)中的操作提取了元組中的元素,也叫作拆包(unpacking)。平行賦值是對元組拆包很好的應(yīng)用,示例如下:
還有一個(gè)經(jīng)典而優(yōu)雅的應(yīng)用是交換變量的值:
用 * 運(yùn)算符把一個(gè)可迭代對象拆開作為函數(shù)的參數(shù),例如Python的內(nèi)置函數(shù)pmod接收兩個(gè)數(shù)字類型的參數(shù),返回商和余數(shù)。以下范例將使用 * 將元組傳入函數(shù)。
輸出為:
有些函數(shù)有多個(gè)返回值,將其賦給一個(gè)變量時(shí),變量類型即是元組:
輸出為:
zip是Python的內(nèi)置函數(shù),能夠接收兩個(gè)或多個(gè)序列,并組成一個(gè)元組列表,在Python3中會(huì)返回一個(gè)迭代器,如下所示:
輸出為:
元組當(dāng)然也支持一些常規(guī)操作,如對于元組 a = (1, 'y', 5, 5, 'x') :
上述內(nèi)容不僅涵蓋了元組的基本操作,同時(shí)也結(jié)合了實(shí)際工作中常搭配使用的其他函數(shù)、運(yùn)算符等。在回顧這些知識(shí)時(shí)主要參考了兩本經(jīng)典的Python編程書籍:《流暢的Python》和《像計(jì)算機(jī)科學(xué)家一樣思考Python》,有興趣的朋友可以深入閱讀!
希望這篇文章對你有幫助,下回將總結(jié)Python列表的使用技巧。
[1]《流暢的Python》:
一:元組(tuple)
1、元組是不可改變的序列,同list一樣,元組可以存放任意類型的元素,一旦元組生成,則它不可以改變(包括增、刪、改)。
2、元組的表示方式:用小括號(hào)()括起來,單個(gè)元素括起來用逗號(hào)(,)區(qū)分是單個(gè)對象還是元組
3、元組的創(chuàng)建:
創(chuàng)建空元組的字符值:t=()
創(chuàng)建非空元組的字面值:
t=200,
t=(20,)
t=(1,2,3)
t=100,200,300
4、元組的構(gòu)造函數(shù)(tuple)
A:tuple()生成一個(gè)空的元組,等同于()
B:tuple(iterable)用可迭代對象生成一個(gè)元組
示例:
t=tuple()
t=tuple(range(10))
t=tuple(‘hello’)
t=tuple([])
二:元組的用法
1、元組的算術(shù)運(yùn)算:(用法與列表的用法完全相同)
+=**=
例:定義兩個(gè)元組,與其相加,再用得到的新元組乘以2,與列表對比一下,看看有何不同?(分析:兩原組相加,會(huì)把第二個(gè)元組的元素放在第一個(gè)元組元素的后面,兩元組相乘,會(huì)重復(fù)原元組元素的個(gè)數(shù),乘以幾,就重復(fù)幾次)
2、元組的比較運(yùn)算:
====!=
3、in/not in
索引取值
切片取值
規(guī)則與列表完全相同
區(qū)別:
元組是不可變對象,不支持索引賦值和切片賦值
4、元組的方法
t.index(v[,begin[,end]])----用于獲取元組中V所在的索引位置
t.count(v)----用于獲取元組中V的個(gè)數(shù)
例:定義一個(gè)元組字面值,查看某個(gè)值在元組的索引位置,并統(tǒng)計(jì)其元組中某個(gè)數(shù)出現(xiàn)的個(gè)數(shù)。
5、元組中的三個(gè)構(gòu)造函數(shù)和序列函數(shù)
Str(obj)
List(iterable)
Tuple(iterable)
序列函數(shù):len,max,min,sum,all,any