1. 程式人生 > 其它 >《Python零基礎快樂學習之旅》學習筆記8——元組(tuple)

《Python零基礎快樂學習之旅》學習筆記8——元組(tuple)

技術標籤:學習筆記Pythonpython元組

文章目錄

第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

往期文章: