2021-12-22|閱讀時間 ‧ 約 7 分鐘

不間斷 Python 挑戰 Day 14 - 元組 (Tuple)

在程式設計中,我們會使用到一些固定不會變動的資料內容,例如一年的月份、物體的邊長、過去一周的氣溫等等,使用串列的結構固然也可以用來儲存這些資料,但串列可以被新增或刪除,不能有效保護這類不可變動的資料。因此,Python也提供了另一種形式的資料結構,稱為元組,它的資料結構和串列相同,但資料的內容不可變動。此外,由於元組的資料結構較串列簡單,它在執行上也會占用較少的資源。

元組

元組的資料結構如下:
tuple = ( data1, data2, data3, ... )
例如我們定義一個儲存台灣直轄市的元組:
cities_tuple = ("台北", "新北", "桃園", "台中", "台南", "高雄")
print(cities_tuple)
print(type(cities_tuple))
執行結果:
('台北', '新北', '桃園', '台中', '台南', '高雄')
<class 'tuple'>
若元組內只需定義一個元素,必須在元素的最後面加上「,」,否則會變成一個字串型態的資料。
# without 「,」
one_tuple = ("台北")
print(one_tuple)
print(type(one_tuple))
# with 「,」
one_tuple = ("台北",)
print(one_tuple)
print(type(one_tuple))
執行結果如下,可以看到不加「,」會被Python解讀為字串類型的資料:
台北
<class 'str'>
('台北',)
<class 'tuple'>
儘管如此,若要建立一個空的元組,只需要括號即可。
empty_tuple = ()
print(empty_tuple)
print(type(empty_tuple))
執行結果:
()
<class 'tuple'>

讀取元組元素

讀取的方式和串列相同,第一個元素的索引值為0、第二個元素的索引值為1,以此類推;若索引值是-1,代表的是元組的最後一個元素、若索引值是-2,代表的是元組的倒數第二個元素,以此類推。
print(cities_tuple[0])
print(cities_tuple[1])
print(cities_tuple[-1])
print(cities_tuple[-2])
執行結果:
台北
新北
高雄
台南
同樣若要同時取得元組中的多個元素,可用元組切片(slice)的方式:
  • tuple[a:b]  # 取得元組索引值為a到(b-1)的元素
  • tuple[:a]   # 取得元組前a個元素
  • tuple[a:]   # 取得元組索引值為a到最後一個元素
  • tuple[a:b:c]  # 以c為間隔取得元組索引值為a到(b-1)的元素
  • tuple[:]    # 取得元組所有元素
print(cities_tuple[2:5])
print(cities_tuple[:2])
print(cities_tuple[2:])
print(cities_tuple[1:5:2])
print(cities_tuple[:])
執行結果:
('桃園', '台中', '台南')
('台北', '新北')
('桃園', '台中', '台南', '高雄')
('新北', '台中')
('台北', '新北', '桃園', '台中', '台南', '高雄')

重新定義元組

元組內的元素不可被新增、刪除,但可以重新定義整個元組的資料。例如我們想要將前面儲存台灣直轄市的元組內容都各多加一個「市」,可以直接重新定義元組:
cities_tuple = ("台北", "新北", "桃園", "台中", "台南", "高雄")
print(cities_tuple)

cities_tuple = ("台北市", "新北市", "桃園市", "台中市", "台南市", "高雄市")
print(cities_tuple)
執行結果:
('台北', '新北', '桃園', '台中', '台南', '高雄')
('台北市', '新北市', '桃園市', '台中市', '台南市', '高雄市')

元組與串列互換

串列可以轉換為元組:
cities_list = ["台北", "新北", "桃園", "台中", "台南", "高雄"]
cities_tuple = tuple(cities_list)
print(cities_tuple)
執行結果:
('台北', '新北', '桃園', '台中', '台南', '高雄')
元組也可以轉換為串列:
cities_list = list(cities_tuple)
print(cities_list)
執行結果:
['台北', '新北', '桃園', '台中', '台南', '高雄']

使用for迴圈迭代

和串列相同,元組也可以使用for迴圈進行迭代:
cities_tuple = ("台北", "新北", "桃園", "台中", "台南", "高雄")
for city in cities_tuple:
  print(city, end=" ")
執行結果:
台北 新北 桃園 台中 台南 高雄

元組生成

元組和for迴圈結合,可以簡潔的方式產生元組,但和串列不同的是,若僅以小括號括住for迴圈的敘述,產生的僅是生成式(generator)物件,必須再經過tuple()轉換成元組。
scores_tuple = ()
scores_tuple = (x for x in range(10))
print(scores_tuple)
執行結果:
<generator object <genexpr> at 0x0000016CEE6199A0>
經過tuple()轉換:
scores_tuple = tuple((x for x in range(10)))
print(scores_tuple)
執行結果:
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

程式範例

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.