在Python中,列表(List)和元組(Tuple)是兩種常用的數據容器,它們長得很像,但用途和特性卻有很大不同。今天我們就來詳細聊聊它們的區別和使用場景,幫你搞清楚什麼時候該用列表,什麼時候該用元組。
一、列表和元組是什麼?¶
先把它們想象成“容器”——用來存放多個元素。比如你要記錄班級裏的學生名單,或者一週的天氣數據,都可以用這兩種容器。
- 列表(List):用中括號
[]定義,像“動態的購物清單”,你可以隨時添加、刪除或修改裏面的東西。 - 元組(Tuple):用小括號
()定義,像“寫好就不能改的合同”,創建後就不能再添加、刪除或修改元素(除非裏面有可變類型元素)。
二、怎麼創建列表和元組?¶
列表的創建¶
直接用中括號包裹元素,元素之間用逗號分隔:
# 空列表
empty_list = []
# 有元素的列表
fruits = ["蘋果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4]
mixed = ["Python", 3.14, True] # 列表可以存不同類型元素
元組的創建¶
直接用小括號包裹元素,同樣用逗號分隔:
# 空元組(較少用)
empty_tuple = ()
# 有元素的元組
days = ("週一", "週二", "週三")
scores = (90, 85, 95)
mixed = ("Python", 3.14, True) # 元組也可以存不同類型元素
注意:如果元組只有一個元素,必須在元素後加逗號,否則會被識別爲普通變量類型!
single_list = [10] # 這是列表,元素是10
single_tuple = (10) # 這是整數類型,不是元組!
single_tuple = (10,) # 這纔是元組,元素是10
三、核心區別:可變 vs 不可變¶
這是列表和元組最本質的區別:
- 列表是可變的(Mutable):創建後可以隨時修改裏面的元素,比如添加、刪除、替換。
- 元組是不可變的(Immutable):創建後不能直接修改元素,也不能添加或刪除元素(除非裏面的元素是可變類型,但整體結構不可變)。
列表的“可變”操作(舉例)¶
列表支持多種修改操作,比如:
# 1. 修改元素
fruits = ["蘋果", "香蕉", "橙子"]
fruits[0] = "草莓" # 修改第一個元素
print(fruits) # 輸出:['草莓', '香蕉', '橙子']
# 2. 添加元素(append)
fruits.append("葡萄") # 在末尾添加
print(fruits) # 輸出:['草莓', '香蕉', '橙子', '葡萄']
# 3. 刪除元素(pop)
fruits.pop(1) # 刪除索引1的元素(香蕉)
print(fruits) # 輸出:['草莓', '橙子', '葡萄']
元組的“不可變”操作(舉例)¶
嘗試對元組做列表的操作,會直接報錯:
# 1. 修改元素(報錯!)
days = ("週一", "週二", "週三")
days[0] = "星期日" # 報錯:'tuple' object does not support item assignment
# 2. 添加元素(報錯!)
scores = (90, 85, 95)
scores.append(100) # 報錯:'tuple' object has no attribute 'append'
# 3. 刪除元素(報錯!)
scores.pop(0) # 報錯:'tuple' object has no attribute 'pop'
例外情況:如果元組裏的元素是列表(可變類型),可以修改這個列表元素:
t = (1, [2, 3], 4)
t[1].append(5) # 修改元組裏的列表元素
print(t) # 輸出:(1, [2, 3, 5], 4)
但這並不改變元組本身的結構(元素位置和數量沒變),只是修改了內部可變元素的內容。
四、什麼時候用列表?什麼時候用元組?¶
用列表的場景:¶
- 數據需要頻繁修改(比如學生成績、購物清單、待辦事項)。
- 數據長度不固定,需要動態添加或刪除元素。
例子:
# 學生成績表(需要隨時更新分數)
scores = [90, 85, 95]
scores.append(88) # 添加新成績
scores[1] = 80 # 修改第2個學生分數
用元組的場景:¶
- 數據確定後不需要修改(比如一週的日期、配置信息、常量)。
- 數據需要“只讀”保護(防止意外修改,比如系統配置)。
- 元組作爲字典的鍵(因爲列表不可哈希,元組可以)。
例子:
# 一週的日期(固定不變)
weekdays = ("週一", "週二", "週三", "週四", "週五", "週六", "週日")
# 配置信息(固定參數)
config = ("localhost", 8080, "admin", "123456")
五、總結:列表 vs 元組¶
| 對比項 | 列表(List) | 元組(Tuple) |
|---|---|---|
| 定義符號 | [] |
() |
| 可變性 | 可變(可增刪改) | 不可變(整體不可改) |
| 元素類型 | 可包含任意類型(包括可變) | 可包含任意類型(包括可變) |
| 用途 | 動態數據(需修改) | 靜態數據(無需修改) |
| 安全性 | 容易被意外修改 | 不可被意外修改,更安全 |
一句話記住:列表是“靈活的購物清單”,元組是“固定的合同”。根據數據是否需要修改,選擇用列表還是元組就不會錯啦!