- Python編程基礎與數據分析
- 王娟 華東 羅建平
- 834字
- 2020-09-11 16:42:32
3.5 元組
元組也是序列的一種,它的兩端用“( )”表示,它與列表類似,不過列表為可變類型,而元組為不可變類型。簡單來說,即不可以直接修改元組的元素,因此,很多列表有的方法、操作,元組沒有。
如列表有sort方法,而元組沒有。因為sort方法修改了原序列,而元組不可修改,所以元組沒有sort方法。若想獲取元組最大或最小的幾個元素,最快的方法還是排序,雖不能直接用sort方法來排序,但可以通過sorted函數來獲取排序后的結果,源元組保持不變。例:
>>> t = (19, 28, 20, 16, 26) >>> t.sort ( ) Traceback (most recent call last) : File "<pyshell#64>", line 1, in <module> t.sort ( ) AttributeError: 'tuple' object has no attribute 'sort' >>> sorted (t) [16, 19, 20, 26, 28] >>> t (19, 28, 20, 16, 26)
元組中的元素不能修改。若實際應用中確實要修改,可以通過切片及連接操作生成一個新的元組。例:
>>> t = (1, 2, 3, 4) >>> t [2] = 30 Traceback (most recent call last) : File "<pyshell#68>", line 1, in <module> t [2] = 30 TypeError: 'tuple' object does not support item assignment >>> t = t [:2] + (30, ) + t [3:] >>> t (1, 2, 30, 4)
因為元組是不可變類型,所以執行“t[2]=30”語句后報錯,而“t=t[:2]+(30,)+t[3:]”語句雖說可以使得t變為(1,2,30,4),但此操作是讓t指向一個新元組,而該新元組是由幾個元組連接而得的結果。下面給出的兩個例子,可以看出可變和不可變類型的區別。例:
>>> L = [1, 2, 3, 4] >>> id (L) 52382728 >>> L [2] = 30 >>> L [1, 2, 30, 4] >>> id (L) 52382728
id(object)返回object對象在內存中的地址,由操作前后L在內存中的地址可以看出這是同一個對象。它通過“L[2]=30”語句對列表L的元素進行了修改。再例:
>>> t = (1, 2, 3, 4) >>> id (t) 52491592 >>> t = t [:2] + (30, ) + t [3:] >>> t (1, 2, 30, 4) >>> id (t) 52474168
此例中,“t = t[:2]+ (30,)+ t[3:]”語句,并不是將原元組的元素進行了修改,從操作前后元組t在內存中的地址可以看出操作前后并不是同一個對象。也就是說,元組本身不可修改,因此通過切片及連接操作生成了新的元組對象賦值給了t。
上例中,“(30,)”表示僅含有一個元素30的元組,此處要注意的是,它跟列表不同,列表“[30]”表示僅含有一個元素30的列表。“(30)”表示數值30,為了避免沖突,因此若表示僅含有一個元素30的元組,則必須在30后增加一個英文逗號,此逗號不能省略。
推薦閱讀
- Learning Cython Programming(Second Edition)
- Debian 7:System Administration Best Practices
- C++面向對象程序設計(微課版)
- Internet of Things with Intel Galileo
- 深入淺出DPDK
- 微信公眾平臺開發:從零基礎到ThinkPHP5高性能框架實踐
- Learning Apache Mahout Classification
- C++對象模型詳解
- 零基礎學Python網絡爬蟲案例實戰全流程詳解(入門與提高篇)
- Mastering ROS for Robotics Programming
- PHP編程基礎與實例教程
- Hands-On Dependency Injection in Go
- INSTANT LESS CSS Preprocessor How-to
- 你好!Python
- Tkinter GUI Application Development Blueprints