Python 簡明教程 ---11,Python 元組

軟件工程的目標(biāo)是控制復(fù)雜度,而不是增加復(fù)雜性瞎访。
—— Dr. Pamela Zave

目錄

我們在上一節(jié)介紹了Python 列表list 數(shù)據(jù)結(jié)構(gòu),本節(jié)來介紹一下元組tuple吁恍。

1扒秸,Python 元組

元組與列表有些相似,它們之間最顯著的不同是践盼,元組一旦定義了以后鸦采,就不能再修改(增加/刪除其中的元素),而列表可以被任意的改咕幻。

Python 元組有如下特點(diǎn):

  • 元組中的元素可以是任意類型的數(shù)據(jù)
  • 可使用下標(biāo)和切片訪問元組內(nèi)容
  • 元組一點(diǎn)定義渔伯,不能再被修改

2,定義元組

我們已經(jīng)知道了定義列表使用中括號[]肄程,而定義元組使用小括號() 表示:

>>> t = ()  # 一個(gè)空的元組
>>> t
()
>>> t = ('a', 1, 3.5, True)  # 元組中可以存放任意類型
>>> t
('a', 1, 3.5, True)

只有一個(gè)元素的元組

當(dāng)定義的元組中只有一個(gè)元素時(shí)锣吼,需要在元素后邊加個(gè)逗號:

>>> t = (1,) 
>>> t      
(1,)

如果沒帶逗號,則這個(gè)小括號()將不會被認(rèn)為是元組符號:

>>> t = (1)   # 相當(dāng)于沒有帶小括號
>>> t
1
>>> t = ('abc')
>>> t
'abc'

3蓝厌,元組的大小

可以使用len() 來查看一個(gè)元組的大行:

>>> t = ('a', 'b', 'c')
>>> len(t)  # 長度為 3
3
>>> t = (1, 3)
>>> len(t)  # 長度為 2
2

4,訪問元組

可以像訪問列表一樣拓提,使用下標(biāo)读恃,切片,和 for 循環(huán)來訪問元組。

使用下標(biāo)訪問元組

>>> t = ('a', 'b', 'c')
>>> t[0]    # 訪問第一個(gè)元素
'a'
>>> t[3]    # 下標(biāo)越界
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
>>> t[-1]   # 訪問倒數(shù)第一個(gè)元素
'c'
>>> t[-3]   # 訪問倒數(shù)第三個(gè)元素
'a'
>>> t[-4]   # 下標(biāo)越界
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range

使用切片訪問元組

>>> t = ('a', 'b', 'c')
>>> t[1:3]
('b', 'c')
>>> t[2:]
('c',)
>>> t[:3]
('a', 'b', 'c')
>>> t[:]
('a', 'b', 'c')

遍歷元組

>>> t = ('a', 'b', 'c')
>>> for i in t:
...     print(i)
... 
a
b
c

5寺惫,元組不可修改

元組是不可變類型疹吃,不能對一個(gè)已定義的元組進(jìn)行以下操作,否則會拋出異常:

  • 添加元素
  • 修改元素
  • 刪除元素

示例:

>>> t = ('a', 'b', 'c')
>>> # 沒有對于元組的添加操作西雀,所以也不用演示 
>>>
>>> t[0] = 1  # 修改元素萨驶,拋出異常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>
>>> del t[1]  # 刪除元素,拋出異常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion

6艇肴,元組運(yùn)算

像列表一樣腔呜,元組也可以進(jìn)行加運(yùn)算乘運(yùn)算再悼,in 運(yùn)算核畴。

>>> ('a', 'b') + (1, 2)  # 加運(yùn)算,得到一個(gè)新的元素
('a', 'b', 1, 2)
>>>
>>> ('a', 'b') * 2       # 乘運(yùn)算帮哈,相當(dāng)于 n 個(gè)元素相加
('a', 'b', 'a', 'b')   
>>>
>>> ('a', 'b') * -1      # n 小于等于 0 時(shí)膛檀,得到一個(gè)空元組
()
>>> 'a' in ('a', 'b')    # in 運(yùn)算锰镀,判斷一個(gè)元素是否包含在元組中
True
>>> 'a' not in ('a', 'b') 
False

7娘侍,元組函數(shù)

通過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']

可以看到處了魔法方法,元組類型僅支持兩個(gè)方法:

  • count 方法
  • index 方法

且沒有任意一個(gè)方法用于修改元組泳炉。

1.count 方法

作用:計(jì)算元組T 中值為value 的個(gè)數(shù)
原型:T.count(value) -> integer
參數(shù):要計(jì)算的元素的值
返回值:個(gè)數(shù)

示例:

>>> t = ['a', 'b', 'c', 'a']
>>> t.count('a')
2
>>> t.count('b')
1
>>> t.count('d')
0

2.index 方法

作用:從元組T[start:stip] 中查找第一個(gè)值為value 的元素
原型:T.index(value, [start, [stop]]) -> integer
參數(shù) value:查找值為value 的元素
參數(shù) start:元組T 的起始下標(biāo)
參數(shù) stop:元組T 的終止下標(biāo)
返回值:若能找到憾筏,則返回該元素的下標(biāo),否則花鹅,拋出ValueError 異常

>>> t = ['a', 'b', 'c']
>>> t.index('b')   # 找到了氧腰,返回下標(biāo)
1
>>> l.index('d')   # 沒找到,拋出 ValueError 異常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'd' is not in list

(完刨肃。)


推薦閱讀:

Python 簡明教程 --- 6古拴,Python 控制流
Python 簡明教程 --- 7,Python 字符串
Python 簡明教程 --- 8真友,Python 字符串函數(shù)
Python 簡明教程 --- 9黄痪,Python 編碼
Python 簡明教程 ---10,Python 列表

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盔然,一起剝皮案震驚了整個(gè)濱河市桅打,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愈案,老刑警劉巖挺尾,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異站绪,居然都是意外死亡遭铺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魂挂,“玉大人航厚,你說我怎么就攤上這事∶膛睿” “怎么了幔睬?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長芹扭。 經(jīng)常有香客問我麻顶,道長,這世上最難降的妖魔是什么舱卡? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任辅肾,我火速辦了婚禮,結(jié)果婚禮上轮锥,老公的妹妹穿的比我還像新娘矫钓。我一直安慰自己,他們只是感情好舍杜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布新娜。 她就那樣靜靜地躺著,像睡著了一般既绩。 火紅的嫁衣襯著肌膚如雪概龄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天饲握,我揣著相機(jī)與錄音私杜,去河邊找鬼。 笑死救欧,一個(gè)胖子當(dāng)著我的面吹牛衰粹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笆怠,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼铝耻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骑疆?” 一聲冷哼從身側(cè)響起田篇,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箍铭,沒想到半個(gè)月后泊柬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诈火,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年兽赁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刀崖,死狀恐怖惊科,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亮钦,我是刑警寧澤馆截,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站蜂莉,受9級特大地震影響蜡娶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜映穗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一窖张、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚁滋,春花似錦宿接、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至踏拜,卻和暖如春碎赢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背速梗。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留襟齿,地道東北人姻锁。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像猜欺,于是被迫代替她去往敵國和親位隶。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容