元組和咱們以前講過的數字,字符串和列表同樣,也是 Python 中的一種對象類型,它和列表比較想象,因此通常會被忽略掉,可是因爲其特殊性,在實際應用的時候又很容易犯錯。python
首先咱們來看一個例子:c++
>>> a = 'abc'
>>> a
'abc'
>>> b = 'def',123,[1,2,3]
>>> b
('def', 123, [1, 2, 3])
>>> type(a)
<class 'str'>
>>> type(b) #type是查看對象類型的函數
<class 'tuple'>
複製代碼
從上面的例子中很容易看出 a 是字符串,可是看 b ,這樣輸入居然沒有報錯,並且把結果放到了一個圓括號裏,這就是 Python 的不同凡響之處,這個帶括號的對象,就是咱們今天要講的新的對象類型:元組 ( tuple ) 。bash
元組是用圓括號括起來的,元素與元素之間用英文的逗號隔開,從上面的例子中咱們也能夠看出,元組也是序列,這個跟字符串和列表相似。可是元組中的元素不能更改,和字符串相似;可是元組裏的元素又能夠是任意的對象類型,這個跟列表類似,因此咱們姑且能夠認爲元組是部分字符串屬性和部分列表屬性的並集。ssh
既然元組也是列表,那麼它跟字符串和列表的基本操做相仿,每一個元素理應有本身對應的索引,而且可切片。函數
>>> str = (1,2,'234',(1,2),['c','c++','python'])
>>> str[2]
'234'
>>> str[4]
['c', 'c++', 'python']
>>> str[4][2]
'python'
複製代碼
關於序列的操做在元組上的操做在這裏就不一一展現了,以前的文章寫過,有興趣的能夠本身嘗試一下,忘記的能夠點下面的文章。學習
零基礎學習 Python 之字符串 零基礎學習 Python 之列表ui
固然了,由於元組是不可修改的,因此在列表裏面因此關於能夠修改列表的方法在這裏都是無效的。那麼元組這類類型的對象有哪些方法呢?還記得以前咱們說過的 dir() 嗎?dir(tuple) 就能夠知道了(下面代碼能夠右拉)。spa
>>> 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']
複製代碼
雖然元組不可修改,可是元組和列表是能夠互相轉化的,能夠用 list() 和 tuple() 實現。code
>>> a = ('a','123',[1,2,3])
>>> type(a)
<class 'tuple'>
>>> a = list(a)
>>> type(a)
<class 'list'>
>>> a = tuple(a)
>>> type(a)
<class 'tuple'>
複製代碼
還有一點須要提醒的是,當元組中只有一個元素的時候,要在元素的後面跟上英文的逗號,要否則 Python 會誤會你想表達的意思,請看下面的例子。orm
>>> str1 = ('rocky',)
>>> type(str1)
<class 'tuple'>
>>> str2 = ('rocky')
>>> type(str2)
<class 'str'>
複製代碼
由於元組比較簡單,因此到這裏基本上就結束了。其實看完元組之後,不少人會有一個疑惑,那就是元組有什麼用呢?既然只是字符串和元組部分功能的並集,那麼咱們只用列表和字符串就行了呀,還學什麼元組?在不少時候確實只須要字符串和列表就能夠解決不少問題,可是不要忘了咱們的計算機是用來處理複雜問題的,就好比咱們說的話同樣,有些詞不經常使用可是它就是不可替代的,咱們照樣要在某些特定的場景下使用它。
就拿元組的其中一個好的地方來講,在字典中,元組能夠做爲字典的 key ,可是列表就不能夠,由於字典的 key 是不可變的。至於什麼是字典,也是一種對象,我在以後會講到。
更多內容,歡迎關注公衆號「Python空間」,期待和你的交流。