日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【Python基础】Python的元组,没想象的那么简单

發(fā)布時間:2025/3/12 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python基础】Python的元组,没想象的那么简单 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Python的元組與列表類似,元組一旦創(chuàng)建,元組中的數(shù)據(jù)一旦確立就不能改變,不能對元組中中的元素進(jìn)行增刪改操作,因此元組沒有增加元素append、更新元素update、彈出元素pop等相關(guān)方法,只有簡單的索引和計數(shù)的方法。

?

列表不能作為字典的key, 而元組可以;列表不能做為集合的項,而元組可以。列表是不可哈希unhashable的,列表元素可以被動態(tài)改變,所以沒有一個固定不變的哈希值-這與集合要求的元素唯一性沖突;而元組的元素被禁止更新,其哈希值在整個生命周期都不會變化,因此可以成為集合的元素。

?

元組中可以包含任何數(shù)據(jù)類型,也可以包含另一個元組,如:T=(1,2,3,('a','b'))

空元組(沒有元素的元組):T=(),含1個元素的元組:T=(1,),注意有逗號,多個元素的元組:T=(1,2,3)

?

一、元組的創(chuàng)建

可以用多種方式構(gòu)建元組,主要有以下四種,每個都會有相應(yīng)的案例:

使用一對圓括號來表示空元組:?()

使用一個后綴的逗號來表示單元組:?a,?或?(a,)

使用以逗號分隔的多個項:?a,?b,?c?or?(a,?b,?c)

使用內(nèi)置的?tuple():?tuple()?或?tuple(iterable)

'''1、使用一對圓括號來表示空元組: ()''' num_tuple = (1, 2, 3)'''2、使用一個后綴的逗號來表示單元組: a, 或 (a,)''' a = 'a', a ('a',) type(a) tuple'''3、使用以逗號分隔的多個項: a, b, c or (a, b, c)''' t = 1,2,3 t (1, 2, 3) type(t) tuple t = 1,2,3,#結(jié)尾多一個逗號也沒事,一樣的效果'''4、使用內(nèi)置的 tuple(): tuple() 或 tuple(iterable)''' t = (1, 2, 3) t = tuple([1, 2

注意:使用元組的時候,如果只有一個元素記得加上一個逗號,不然就是一條賦值語句。

#表達(dá)式?一個賦值語句 t = (1) #用type查看下類型,是整數(shù)類型,并不是tuple類型 type(t) intt = (1,) #加逗號元組

二、元組的方法

由于元組并不能夠像列表一樣修改,因此元組并沒有特別多的方法,就兩個方法,count和index。

print(dir(tuple)) ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] 1、index

作用:tuple的index方法:獲取指定元素的下標(biāo)(就近原則,從左往右,找到第一個就結(jié)束)

用法:index(self, value, start=None, stop=None)

參數(shù):

  • value-待查詢下標(biāo)的元素

  • start-查詢起始下標(biāo)

  • stop-查詢終止下標(biāo)(查詢到stop前一個下標(biāo)) ?

t=('s','a','a','r',5) t.index('r') 3 t.index(5) 4 # index方法:根據(jù)元素找到其位置 t = (1, 2, 3, 1, 2) t.index(1, 2) # 尋找第2個元素1的位置

2、count

作用:獲取指定元素在元組中出現(xiàn)的次數(shù)

用法:count(self, value) ?

參數(shù):value-待查詢出現(xiàn)次數(shù)的元素

t.count('a') 2 t.count(5) 1

3、其他操作

先生成兩個元組備用

s1=(1,2,3) s2=('a','b','c')

1)拼接生成新元組

'''拼接生成新元組''' s1+s2 (1, 2, 3, 'a', 'b', 'c') s1.__add__(s2) (1, 2, 3, 'a', 'b', 'c')

2)是否包含

'''是否包含''' 2 in s1 True? s1.__contains__('a') False s2.__contains__('a') True

3)獲取元素

'''獲取元素''' s1[0] 1 s2.__getitem__(0) 'a'

4)獲取長度

'''獲取長度 ''' len(s1) 3 s1.__len__() 3

5)重復(fù)拼接

'''重復(fù)拼接''' s1*3 (1, 2, 3, 1, 2, 3, 1, 2, 3)

6)刪除元組

元祖中的元素值不可以修改和刪除,但是我們可以使用 del 關(guān)鍵字刪除整個元組。

t= ("a", "b", "c") del t t name 't' is not defined

7)最大最小值

t= (10, 22, 0, 15, 40) max(t) 40 min(t) 0

?

三、命名元組

對于元組,這個特性,我認(rèn)為,才是元組存在的意義所在。只講命名元組,可能不太好理解。如果稱之為帶字段名的記錄,你可能就清楚了。

這里舉個例子,但是實現(xiàn)帶字段名,需要另一個庫(collections)的支持,你需要導(dǎo)入它。

from collections import namedtuple #生成一個City類 City = namedtuple("City", "name country polulation coordinates") #實例化 tokyo = City("Tokyo", 'JP', '36.93', ('35.68','139,69')) print(tokyo) City(name='Tokyo', country='JP', polulation='36.93', coordinates=('35.68', '139,69')) print(tokyo.name) Toky

看著有點像字典,是不是,但是他不是字典(獲取數(shù)值的方法也與字典不同),字典是可變。元組在創(chuàng)建后,就無法再對其進(jìn)行修改。這在某個程度上說明元組適合存放那些無需修改的數(shù)據(jù)。比如上面的,地名,國家,經(jīng)緯度。

除了上面的用法之處,這里還要介紹一些元組自己專有的屬性。

# 打印字段名 print(City._fields) ('name', 'country', 'polulation', 'coordinates')# 生成新實例 LatLong = namedtuple('LatLong', 'lat long') Xiamen_tuple = ('Xiemen', 'China', '40,54', LatLong(24.26,118.03)) Xiamen = City._make(Xiamen_tuple)print(Xiamen) City(name='Xiemen', country='China', polulation='40,54', coordinates=(24.26, 118.03))# 將具名元組轉(zhuǎn)為OrderDict Xiamen_dict = Xiamen._asdict() print(Xiamen_dict) OrderedDict([('name', 'Xiemen'), ('country', 'China'), ('polulation', '40,54'), ('coordinates', LatLong(lat=24.26, long=118.03))])

總結(jié)一下,元組是一種很強(qiáng)大的可以當(dāng)作記錄來用的數(shù)據(jù)類型,這才是他存在的價值和意義所在。而為人所熟知的,它的第二個角色才是充當(dāng)一個不可變的列表。(以上都是個人看法,如有不同見解,歡迎留言討論)

?

四、與列表的比較

類似的問題, 建議移步 StackOverflow 或者 python doc。

https://stackoverflow.com/questions/626759/whats-the-difference-between-lists-and-tuples

https://docs.python.org/zh-cn/3/library/stdtypes.html#sequence-types-list-tuple-range

翻譯部分觀點如下:

1、Tuples are immutable, lists are mutable.

元組是不可變的, 而列表是可變的。

?

2、Tuples are heterogeneous data structures, lists are homogeneous sequences. Tuples have structure, lists have order.

元組通常由不同的數(shù)據(jù),而列表是相同類型的數(shù)據(jù)隊列。元組表示的是結(jié)構(gòu),而列表表示的是順序。舉個例子來講:當(dāng)你想記錄棋盤上一個子的坐標(biāo)時, 應(yīng)該使用元組; 當(dāng)你想記錄棋盤上所有的子的坐標(biāo)(一系列相同的數(shù)據(jù))時,應(yīng)該使用列表。

# 表示一個點 point = (1, 2)# 表示一系列點 points = [(1, 2), (1, 3), (4, 5)]

3、 You can't use list as a dictionary identifier.

你不能將列表當(dāng)作字典的key, 而元組可以。

a = (1, 2) b = [4, 5]c = {a: 'start point'} # OK {(1, 2): 'start point'} c = {b: 'end point'} # Error

?

4、Due to the smaller size of a tuple operation with it a bit faster but not that much to mention about until you have a huge amount of elements.

由于元組支持的操作比列表小, 所以元組會比列表稍稍快上那么一丟丟。但是除非你有巨量的數(shù)據(jù)要去處理,否者這一點不需要特別強(qiáng)調(diào)。

往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯 本站qq群704220115,加入微信群請掃碼:

總結(jié)

以上是生活随笔為你收集整理的【Python基础】Python的元组,没想象的那么简单的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。