元組 tuple的定義
列表屬於可變序列,可以任意修改列表中的元素。元組屬於不可變序列,不能修改元組中的
元素。因此,元組沒有增加元素、修改元素、刪除元素相關的方法。我們只需要學習元組的創建和刪除,元組中元素的訪問和計數即可。
元組支持如下操作:
- 索引訪問
- 切片操作
- 連接操作
- 成員關系操作
- 比較運算操作
- 計數:元組長度 len()、最大值 max()、最小值 min()、求和 sum()等。
元組的創建
通過()創建元組。小括號可以省略。
a = (10,20,30) 或者 a = 10,20,30
注:如果元組只有一個元素,則必須后面加逗號。這是因為解釋器會把(1)
解釋為整數 1,(1,)
解釋為元組。
通過 tuple()創建元組,tuple(可迭代的對象)
b = tuple() #創建一個空元組對象
b = tuple("abc")
b = tuple(range(3))
b = tuple([2,3,4])
元組的元素訪問和計數
元組的元素不能修改
>>> a = (20,10,30,9,8)
>>> a[3]=33
Traceback (most recent call last):
File "<pyshell#313>", line 1, in <module>
a[3]=33
TypeError: 'tuple' object does not support item assignment
元組的元素訪問和列表一樣,只不過返回的仍然是元組對象。
>>> a = (20,10,30,9,8)
>>> a[1]
10
>>> a[1:3]
(10, 30)
>>> a[:4]
(20, 10, 30, 9)
列表關於排序的方法 list.sorted()是修改原列表對象,元組沒有該方法。如果要對元組排序,只能使用內置函數 sorted(tupleObj),並生成新的列表對象。
>>> a = (20,10,30,9,8)
>>> sorted(a)
[8, 9, 10, 20, 30]
zip()
zip(列表 1,列表 2,…)將多個列表對應位置的元素組合成為元組,並返回這個 zip 對象。
>>> a = [10,20,30]
>>> b = [40,50,60]
>>> c = [70,80,90]
>>> d = zip(a,b,c)
>>> list(d)
[(10, 40, 70), (20, 50, 80), (30, 60, 90)]
生成器推導式創建元組
從形式上看,生成器推導式與列表推導式類似,只是生成器推導式使用小括號。列表推導式直接生成列表對象,生成器推導式生成的不是列表也不是元組,而是一個生成器對象。我們可以通過生成器對象,轉化成列表或者元組。也可以使用生成器對象的__next__()方法進行遍歷,或者直接作為迭代器對象來使用。不管什么方式使用,元素訪問結束后,如果需要重新訪問其中的元素,必須重新創建該生成器對象。
【操作】生成器的使用測試
>>> s = (x*2 for x in range(5))
>>> s
<generator object <genexpr> at 0x0000000002BDEB48>
>>> tuple(s)
(0, 2, 4, 6, 8)
>>> list(s) #只能訪問一次元素。第二次就為空了。需要再生成一次
[]
>>> s
<generator object <genexpr> at 0x0000000002BDEB48>
>>> tuple(s)
()
>>> s = (x*2 for x in range(5))
>>> s.__next__()
0
>>> s.__next__()
2
>>> s.__next__()
4
元組總結
- 元組的核心特點是:不可變序列。
- 元組的訪問和處理速度比列表快。
- 與整數和字符串一樣,元組可以作為字典的鍵,列表則永遠不能作為字典的鍵使用。
轉載於:<https://blog.csdn.net/weixin_43158056/article/details/92799273