在Python中,列表(List)是一種非常靈活的數據結構,它可以存儲多個元素,並且這些元素可以是不同類型的(比如數字、字符串、甚至其他列表)。要在列表中獲取我們需要的元素,就需要用到“索引”和“切片”這兩個工具。
1. 列表索引:訪問單個元素¶
列表中的每個元素都有一個對應的位置編號,這個編號就是“索引”(Index)。在Python中,列表的索引是從 0 開始的,也就是說第一個元素的索引是0,第二個是1,以此類推。
正索引示例:
fruits = ["apple", "banana", "cherry", "date"]
# 訪問第一個元素(索引0)
print(fruits[0]) # 輸出: apple
# 訪問第三個元素(索引2)
print(fruits[2]) # 輸出: cherry
負索引示例:
有時候我們需要從列表末尾開始訪問元素,這時可以用負索引。-1表示最後一個元素,-2表示倒數第二個,依此類推。
# 訪問最後一個元素(索引-1)
print(fruits[-1]) # 輸出: date
# 訪問倒數第二個元素(索引-2)
print(fruits[-2]) # 輸出: cherry
⚠️ 注意:如果索引超出列表範圍(比如正索引大於等於列表長度,或負索引小於-列表長度),會報錯 IndexError。例如:
# 錯誤示例:索引4超出列表長度(長度爲4,最大索引是3)
print(fruits[4]) # 報錯:IndexError: list index out of range
2. 列表切片:獲取子列表¶
切片(Slice)用於一次性獲取列表中的多個元素,語法是 list[start:end:step],其中:
- start:切片的起始位置(包含該位置元素)
- end:切片的結束位置(不包含該位置元素)
- step:步長,默認爲1(每隔1個元素取一個)
2.1 基本切片(左閉右開)¶
切片遵循“左閉右開”原則,即包含 start,不包含 end。
示例:
numbers = [0, 1, 2, 3, 4, 5]
# 從索引1到索引3(包含1,不包含3)
print(numbers[1:3]) # 輸出: [1, 2]
# 從索引2到末尾(包含2,到最後一個元素)
print(numbers[2:]) # 輸出: [2, 3, 4, 5]
# 從開頭到索引3(包含開頭,不包含3)
print(numbers[:3]) # 輸出: [0, 1, 2]
2.2 帶步長的切片¶
step 參數可以控制切片的間隔,比如 step=2 表示每隔1個元素取一個。
示例:
# 步長爲2,從開頭到6(不包含)
print(numbers[::2]) # 輸出: [0, 2, 4]
# 從索引1到5(不包含),步長爲2
print(numbers[1:5:2]) # 輸出: [1, 3]
2.3 反向切片(步長爲負數)¶
當 step 爲負數時,切片會從後往前取,此時 start 通常大於 end(否則結果爲空列表)。
示例:
# 反轉整個列表(步長-1)
print(numbers[::-1]) # 輸出: [5, 4, 3, 2, 1, 0]
# 從索引4到1(不包含),步長-1(從後往前)
print(numbers[4:1:-1]) # 輸出: [4, 3, 2]
3. 常見注意事項¶
- 切片不報錯:即使
start或end越界,Python也會自動返回空列表(不會報錯)。例如:
numbers = [0, 1, 2]
print(numbers[10:20]) # 輸出: [](start超出範圍)
print(numbers[:-5]) # 輸出: [](end爲負數且小於-長度)
- 切片與原列表的關係:切片返回的是原列表的“副本”,修改切片結果不會影響原列表(除非顯式賦值)。例如:
sub = numbers[1:3]
sub[0] = 99 # 修改子列表
print(numbers) # 原列表不變,輸出: [0, 1, 2]
4. 總結¶
列表索引和切片是Python中處理序列數據的核心工具:
- 索引:用 list[i] 訪問單個元素,從0或-1開始,越界會報錯。
- 切片:用 list[start:end:step] 獲取子列表,左閉右開,可通過 step 控制步長和方向(正向/反向)。
多練習不同場景:比如獲取前N個元素、反轉列表、隔元素取數等,就能熟練掌握它們的用法啦!