python3 第十三章,python3
- 元組與列表類似,不同之處在於元組的元素不能修改。
- 元組使用小括弧,列表使用方括弧。
元組建立很簡單,只需要在括弧中添加元素,並使用逗號隔開即可:
language = ('c', 'c++', 'python')
也可以省略括弧:
language = 'c', 'c++', 'python'
建立空元組:
language = ()
元組中只包含一個元素時,需要在元素後面添加逗號“,”來消除歧義,否則括弧會被當作運算子使用(思考,會當做什麼運算子來用):
tup1 = (50)print(type(tup1)) # 不加逗號,類型為整型tup1 = (50,)print(type(tup1)) # 加上逗號,類型為元組
以上代碼,輸出:
<class 'int'><class 'tuple'>
元組與字串類似,下標索引從0開始,可以進行截取,組合等。
1、訪問元組
元組可以使用下標索引來訪問元組中的值:
language = ('c', 'c++', 'python')
print(language[0])print(language[1:3])
以上代碼,輸出:
c('c++', 'python')
2、修改元組
元組中的元素值是不允許修改的,但我們可以對元組進行串連組合,如下執行個體:
language = ('c', 'c++', 'python')animal = ('dog', 'cat')# 以下修改元組元素操作是非法的。# language[0] = 'C#'tup = language + animal # 建立一個新的元組print(tup)
以上代碼,輸出:
('c', 'c++', 'python', 'dog', 'cat')
3、刪除元組
元組中的元素值是不允許刪除的,但我們可以使用del語句來刪除整個元組,如下執行個體:
language = ('c', 'c++', 'python')print(language)del languageprint('刪除後的元組 ', language)
以上代碼,輸出:
('c', 'c++', 'python')NameError: name 'language' is not defined
我們發現,調用del刪除元組後,再列印元組language會輸出變數會有異常資訊
4、元組運算子
與字串一樣,元組之間可以使用 + 號和 * 號進行運算。這就意味著他們可以組合和複製,運算後會產生一個新的元組。
| Python 運算式 |
結果 |
描述 |
| len((1, 2, 3)) |
3 |
計算元素個數 |
| (1, 2, 3) + (4, 5, 6) |
(1, 2, 3, 4, 5, 6) |
串連 |
| ('Hi!',) * 4 |
('Hi!', 'Hi!', 'Hi!', 'Hi!') |
複製 |
| 3 in (1, 2, 3) |
True |
元素是否存在 |
| for x in (1, 2, 3): print x, |
1 2 3 |
迭代 |
5、元組索引,截取
因為元組也是一個序列,所以我們可以訪問元組中的指定位置的元素,也可以截取索引中的一段元素,如下所示:
language = ('c', 'c++', 'python')print('讀取第三個元素language[2]:', language[2])print('從右側開始讀取倒數第二個元素language[-2]:', language[-2])print('輸出從第二個元素開始後的所有元素language[1:]:', language[1:])
以上代碼,輸出:
讀取第三個元素language[2]: python從右側開始讀取倒數第二個元素language[-2]: c++輸出從第二個元素開始後的所有元素language[1:]: ('c++', 'python')
6、“可變的”tuple:
language = ('c', 'c++', ['c#', 'python']) # 元組language的第三個元素為列表print(language)language[2][0] = 'java' # 改變列表的第1個元素的值print(language)
以上代碼,輸出:
('c', 'c++', ['c#', 'python'])('c', 'c++', ['java', 'python'])
不是說tuple一旦定義後就不可變了嗎?怎麼後來又變了?表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向'a',就不能改成指向'b',指向一個list,就不能改成指向其他對象,但指向的這個list本身是可變的!
理解了“指向不變”後,要建立一個內容也不變的tuple怎麼做?那就必須保證tuple的每一個元素本身也不能變。