- Python基礎及應用
- 呂云翔 姚澤良 張揚等編著
- 1754字
- 2021-10-27 15:16:31
4.2 Tuple(元組)
Tuple又叫元組,是一個線性結構,它的表達形式是這樣的:

即用一個圓括號括起來的一串對象就可以創建一個Tuple,之所以說它是一個線性結構是因為在元組中元素是有序的,比如我們可以這樣去訪問它的內容:

這段代碼會輸出:

這里可以看到,我們通過“[]”運算符直接訪問了Tuple的內容,這個運算符在上一章已經見過了,但是沒有深入講解。這里先詳細學習切片操作符,因為它是一個非常常用的運算符,尤其在Tuple和List中應用廣泛。
4.2.1 切片
1.背景
切片操作符和C/C++的下標運算符非常像,但是在C/C++中,“[]”只能用來取出指定下標的元素,所以它在C/C++中叫作下標運算符。
在Python中,這個功能被極大地擴展了——它不但能取一個元素,還能取一串元素,甚至還能隔著取、倒著取、反向取等。由于取一串元素的操作更像是在切片,所以我們稱它為切片操作符。
靈活使用切片操作符,往往可以大大簡化代碼,這也是Python提供的便利之一。
2.取一個元素
如果有一個Tuple,并且我們想取出其中一個元素,可以使用具有一個參數的下標運算符:

絕大部分編程語言下標都是從0開始的,也就是說在Python中對于一個有n個元素的Tuple,自然數下標的范圍是0~n-1。
所以這里會輸出tuple1中下標為2的第3個元素:

這是切片操作符最簡單的形式,它只接收一個參數就是元素的下標,也就是上面例子里的2。
特別地,Python支持負數下標表示從結尾倒著取元素,比如如果想取出最后一個元素:

但是要注意的是負數下標是從-1開始的,所以對于一個含有n個元素的Tuple,它的負數下標范圍為-1~-n,因此這里得到的是下標為4的最后一個元素,輸出為:

如果我們取了一個超出范圍的元素:

那么Python解釋器會拋出一個IndexError異常:

這個異常的詳細信息是下標超出了范圍。如果遇到這種情況,需要檢查一下代碼是不是訪問了不存在的下標。
3.取連續的元素
先看一個例子:

這段代碼會輸出:

我們會發現結果仍然是一個Tuple,由第1個到第4個元素之間的元素構成,其中包含第1個元素,但是不包含第4個元素。
這種切片操作接收兩個參數,開始下標和結束下標,中間用分號隔開,也就是上面例子中的0和3,但是要注意的是元素下標區間是左閉右開的。如果對之前講循環時候的range還有印象的話,可以發現它們的區間都是左閉右開的,這是Python中的一個規律。
特殊地,如果從第0個元素開始取,或者要一直取到最后一個,我們可以省略相應的參數,比如:

第一句表示從第1個元素取到第3個元素,第二句表示從第4個元素取到最后一個元素,所以輸出為:

同樣地,這里也可以使用負下標,比如:

表示從第1個元素取到倒數第2個元素,所以輸出為:

4.以固定間隔取連續的元素
上述取連續元素的操作其實還可以進一步豐富,比如下面這個例子:

這段代碼會輸出:

這里表示的含義就是從第2個元素取到第5個元素,每2個取第1個元素。于是我們取出了第2個和第4個元素。這也是切片操作符的完整形式,即[開始:結束:間隔],例如上面的[1:4:2]。
特殊地,這個間隔可以是負數,表示反向間隔,例如:

這句代碼會輸出:

可以看出就是翻轉了整個Tuple。
4.2.2 修改
這里說的“修改”并不是原位的修改,因為Tuple的元素一旦指定就不可再修改,而是通過創建一個新的Tuple來實現修改,比如下面這個例子:

這段代碼會輸出:

可以看到我們通過創建tuple3和tuple4,“修改”了tuple1和tuple2。
同時要注意的是,之前在講字符串的時候提到的加法和乘法對Tuple的操作也是類似的,效果分別是兩個Tuple元素合并為一個新的Tuple和重復自身元素返回一個新的Tuple。
4.2.3 遍歷
遍歷有兩種方法:

這段代碼會輸出:

這里,在print函數中加了一個使結束符為空的參數,這個用法會在下一章函數中講到,這里只要知道這樣會使print不再自動換行就可以了。
我們可以通過一個for循環或者while循環直接順序訪問元組的內容。顯然for循環不僅可讀性高而且更加簡單,在大多數情況下應該優先采用for循環。
另外值得一提的是,之所以Tuple可以這樣用for遍歷是因為Tuple包括后面馬上要提到的List和Dict對象本身是可迭代的對象,這個概念之后會細講,這里只要學會for循環的用法就可以了。
4.2.4 查找
在Tuple中查找元素可以用in,比如:

這段代碼會輸出:

in是一個使用廣泛的用于判斷包含的運算符,類似地還有not in。in的作用就是判斷特定元素是否在某個對象中,如果包含就返回True,否則返回False。
4.2.5 內置函數
此外有一些內置函數可以作用于Tuple上,比如:

從上到下分別是求tuple1的長度、tuple1中最大的元素、tuple2中最小的元素。
這些函數對接下來即將講到的List和Dict也有類似的作用。
- 程序員修煉之道:程序設計入門30講
- Docker技術入門與實戰(第3版)
- Rake Task Management Essentials
- HTML5 and CSS3 Transition,Transformation,and Animation
- Effective Python Penetration Testing
- Hands-On Automation Testing with Java for Beginners
- C語言程序設計
- 從零開始學Linux編程
- 從零開始:UI圖標設計與制作(第3版)
- Web App Testing Using Knockout.JS
- WebStorm Essentials
- Modular Programming with JavaScript
- Learning ROS for Robotics Programming
- 情境微課開發(第2版)
- Learning HTML5 by Creating Fun Games