《Python零基礎快樂學習之旅》學習筆記8——元組(tuple)
文章目錄
第8章 元組(tuple)
元組(Tuple)是Python提供的一種資料型別,它的結構與列表完全相同,但是元組與列表最大的區別在於:元組的元素值不可更改,元素個數不可變動。因此元組也被稱為不可改變的列表。
8.1 元組的定義
列表在定義時是將元素放在中括號“[]”內,而元組的定義則是將元素放在小括號“()”內。元組的語法格式如下:
name_tuple = (元素1, 元素2, ..., 元素n,) # name_tuple是假設的元組名稱
元組中的每一組資料稱為元素,元素可以是整數、字串或列表等,這些元素放在小括號“()”內,彼此之間用逗號“,”隔開,最右邊的“,”可有可無。使用print()函式,將元組名稱作為變數名稱,可列印元組內容。如果元組內的元素只有一個,在定義時需要在元素的右邊加上逗號“,”,如:tuple = (13,)
程式例項:
# 定義與列印元組
numbers = (1, 2, 3, 4, 5,) # 定義元組元素是整數
fruits = ('apple', 'banana', 'orange' ) # 定義元組元素為字串
mixed = ('price', 30) # 定義元組元素為不同型別的資料
val_tuple = (18,) # 只有一個元素的元組
print(numbers, type(numbers))
print(fruits, type(fruits))
print(mixed, type(mixed))
print(val_tuple, type(val_tuple))
執行結果:
(1, 2, 3, 4, 5) <class 'tuple'>
('apple', 'banana', 'orange') <class 'tuple' >
('price', 30) <class 'tuple'>
(18,) <class 'tuple'>
8.2 讀取元組元素
讀取元組內容的方式與列表一樣,都是使用中括號。元組元素的索引值從0開始,如要讀取元組的第1個元素,則使用元組名稱[0],讀取索引值為i的元組元素則使用元組名稱[i]。
程式例項:
# 讀取元組元素
numbers = (1, 2, 3, 4, 5) # 定義元組元素是整數
fruits = ('apple', 'banana', 'orange') # 定義元組元素為字串
mixed = ('price', 30) # 定義元組元素為不同型別的資料
val_tuple = (18,) # 只有一個元素的元組
print(numbers[1])
print(fruits[2])
print(mixed[1])
print(val_tuple[0])
執行結果:
2
orange
30
18
8.3 遍歷所有元組元素
在Python中可以使用for迴圈遍歷所有元組元素,用法與列表相同。
程式例項:
# 遍歷元組元素
tuple1 = ('apple', '10086', 38, ['php', 'java', 'python'])
for t in tuple1:
print(t)
執行結果:
apple
10086
38
['php', 'java', 'python']
8.4 修改元組內容
元組元素內容是不可更改的,更改元組元素內容會發生錯誤。
程式例項:
fruits = ('orange', 'pear', 'peach') # 定義元組元素是字串
print(fruits[1]) # 列印元組fruits[0]
fruits[0] = 'banana' # 將元素內容更改為banana
print(fruits[0])
執行結果:

上述最後一行錯誤資訊TypeError指出:tuple物件不支援賦值,相當於不可更改它的元素值。
如果要修改元組元素,只能使用重新定義元組的方式進行處理。
程式例項:
fruits = ('apple', 'banana', 'orange')
print("原始fruits元組元素:")
for fruit in fruits:
print(fruit)
fruits = ('orange', 'cherry', 'peach') # 定義新的元組元素
print("\n新的fruits元組元素:")
for fruit in fruits:
print(fruit)
執行結果:
原始fruits元組元素:
apple
banana
orange
新的fruits元組元素:
orange
cherry
peach
8.5 元組切片(tuple slices)
元組切片的概念與列表切片相同,即根據某些規則,取元組內容的一部分。常用語法格式如下:
name_tuple[start:end] # 讀取從索引start到(end-1)索引的列表元素
name_tuple[:n] # 取得列表前n名
name_tuple[n:] # 取得列表索引n到最後
name_tuple[-n:] # 取得列表後n名
name_tuple[:] # 取得所有元素
name_tuple[start:end:step] # 每隔step,讀取從索引start到(end-1)索引的列表元素
程式例項:
# 元組切片的應用
fruits = ('apple', 'banana', 'cherry', 'orange', 'pear', 'watermelon')
print(fruits[0:3])
print(fruits[:3])
print(fruits[2:])
print(fruits[-4:])
print(fruits[:])
print(fruits[1:6:2])
執行結果:
('apple', 'banana', 'cherry')
('apple', 'banana', 'cherry')
('cherry', 'orange', 'pear', 'watermelon')
('cherry', 'orange', 'pear', 'watermelon')
('apple', 'banana', 'cherry', 'orange', 'pear', 'watermelon')
('banana', 'orange', 'watermelon')
8.6 方法與函式
應用在列表上的方法或函式如果不會更改列表內容,則可以將它應用在元組。如len()。會更改列表內容的則不能應用到元組中,如:append()、insert()和pop()。
fruits = ('apple', 'banana', 'cherry', 'orange', 'pear', 'watermelon')
print("fruits元組長度為 %d" % len(fruits))
執行結果:
fruits元組長度為 6
8.7 列表與元組資料互轉
在程式設計過程中,如果需要將列表(list)與元組(tuple)資料型別相互轉換,可使用下列指令。
list():將元組資料型別轉換成列表
tuple():將列表資料型別轉換成元組
程式例項:
# 元組與列表相互轉換
list1 = ['apple', 'banana', 'orange', 10086]
tuple1 = (110, 120, '119', '永不畢業的李華')
print(list1, type(list1))
print(tuple1, type(tuple1))
tuple1_list = list(tuple1) # 將元組改為列表
tuple1_list.append('法外狂徒張三') # 新增元素
print(tuple1_list, type(tuple1_list))
list1_tuple = tuple(list1) # 將列表改為元組
print(list1_tuple, type(list1_tuple))
list1_tuple.pop()
執行結果:

元組內建方法max()、min()的應用:
tup = (1, 3, 5, 7, 9)
print("元組tup中的最大值:%d" % max(tup))
print("元組tup中的最小值:%d" % min(tup))
執行結果:
元組tup中的最大值:9
元組tup中的最小值:1
8.8 元組的優點
- 可以更安全地保護資料
程式設計中,可能會遇到有些資料永遠都不會改變的情況,將它儲存在元組內,可以更安全地保護這些資料。如:影象處理時物件的長、寬或每一畫素的色彩資料等。
- 加快程式執行速度
元組結構比列表簡單,佔用系統資源較少,程式執行速度較快。
divmod()函式的用法:
商,餘數 = divmod(被除數, 除數)
divmod()函式的返回值其實是元組,所以可使用元組方式取得商和餘數。
程式例項:
dist = 384400
speed = 1225
total_hours = dist // speed # 小時數
data = divmod(total_hours, 24)
print("divmod()函式返回的資料及資料型別:",data, type(data))
print("商:", data[0])
print("餘數:",data[1])
執行結果:
divmod()函式返回的資料及資料型別: (13, 1) <class 'tuple'>
商: 13
餘數: 1
往期文章:
