什么是元組(tuple)
元組和列表一樣,也是包含對象的序列,唯一不同的是元組不能被修改。
在python中創(chuàng)建元組很簡單,使用,分割一些元素,那么就可以創(chuàng)建元組了。例如:
In [1]: 1, 2, 3
Out[1]: (1, 2, 3)
可以看出元組由()包圍元素組成,元素之間使用,分隔。
那如何創(chuàng)建空元組呢?
In [2]: ()
Out[2]: ()
特別注意創(chuàng)建包含一個(gè)元素的元組:
In [3]: 11 # 并沒有創(chuàng)建元組
Out[3]: 11
In [4]: (11) # 這樣也是沒用的
Out[4]: 11
In [5]: 11, # 這樣才能創(chuàng)建一個(gè)元素的元組
Out[5]: (11,)
可以看出元組中只包含一個(gè)元素時(shí),加不加()都不能創(chuàng)建一個(gè)元組,必須在這唯一的元素后面加上,,才能真正創(chuàng)建一個(gè)元組。
Python中為了消除歧義,規(guī)定單個(gè)元素的元組后面必須加
,,這樣可以和加了括號()的數(shù)學(xué)運(yùn)算加以區(qū)分。例如:(10+10),就可以看做是一個(gè)元組(20,),(10+10)被看做是數(shù)字20。
元組有什么用?
既然元組(tuple)和列表(list)基本一樣,只是元組不能被修改,那么我們?yōu)槭裁葱枰M呢?
理論上我們可以在不改變列表(list)元素的情況下,使用列表代替元組。但誰知道呢?你在什么不經(jīng)意間就改變了它或是別的什么人故意這么干呢?所以能使用元組代替列表的地方盡量使用元組。
元組的使用
你可以使用tuple()根據(jù)已有的列表(list)或字符串(string)等序列類型來構(gòu)造一個(gè)元組,當(dāng)然也可以使用另一個(gè)元組構(gòu)建一個(gè)元組,當(dāng)然返回的還是那個(gè)元組。(有點(diǎn)繞口,因?yàn)樵M也是序列類型,舉栗子)
In [13]: tuple([1, 2, 3, 4]) # 傳入一個(gè)列表
Out[13]: (1, 2, 3, 4)
In [14]: tuple('abcd') # 傳入一個(gè)字符串
Out[14]: ('a', 'b', 'c', 'd')
In [15]: tuple((1, 2, 3, 4)) # 傳入一個(gè)元組
Out[15]: (1, 2, 3, 4)
In [16]: tuple(1) # 傳入一個(gè)數(shù)字時(shí),提示傳入的是int類型不是 iterable
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-16-3ab91a0f6af3> in <module>()
----> 1 tuple(1)
TypeError: 'int' object is not iterable
In [17]: tuple(1, 2, 3, 4) # 少了[]或是()就是4個(gè)參數(shù)了,這是很容易犯的錯(cuò)誤
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-4257a50ecd84> in <module>()
----> 1 tuple(1, 2, 3, 4)
TypeError: tuple() takes at most 1 argument (4 given)
其他使用上元組(list)和列表(list)基本一致,可以訪問索引,分片操作,只是元組少了一些改變自身的方法(因?yàn)樵M是不可變的),當(dāng)然列表只有兩個(gè)可用的方法index()和count()。