列表索引與切片:Python中如何訪問列表元素?

在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. 常見注意事項

  • 切片不報錯:即使 startend 越界,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個元素、反轉列表、隔元素取數等,就能熟練掌握它們的用法啦!

小夜