Python 中的切片(Slicing)詳解:新手指南

更新日期: 2024 年 9 月 19 日

在 Python 編程中,切片(Slicing) 是一種強大的工具,允許您從序列(如列表、字串、元組)中提取子序列。

透過切片,您可以輕鬆地獲取、修改和操作序列中的部分資料。

對於剛開始學習 Python 的新手來說,掌握切片的用法將大大提升您的編程效率。

本文將深入介紹 Python 中的切片,並提供豐富的示例,幫助您靈活運用。


什麼是切片?

切片(Slicing) 是一種操作序列的方法,允許您通過指定開始和結束索引,獲取序列中的一部分。

切片不僅適用於列表,還適用於字串、元組等序列類型。

基本語法:

sequence[start:stop:step]
  • start(起始索引):切片開始的位置,默認為 0。
  • stop(結束索引):切片結束的位置(不包含該索引位置的元素)。
  • step(步長):每次跳過的元素數量,默認為 1。

切片的基本用法

從列表中切片

示例:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 獲取前三個元素
print(numbers[0:3])  # 輸出:[0, 1, 2]

# 獲取從索引 3 到索引 6 的元素
print(numbers[3:7])  # 輸出:[3, 4, 5, 6]

# 獲取列表的所有元素
print(numbers[:])    # 輸出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

從字串中切片

示例:

text = "Hello, Python!"

# 獲取前五個字符
print(text[0:5])  # 輸出:Hello

# 獲取逗號後的內容
print(text[7:])   # 輸出:Python!

# 獲取整個字串
print(text[:])    # 輸出:Hello, Python!

使用步長

示例:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 每隔一個元素取一次
print(numbers[::2])  # 輸出:[0, 2, 4, 6, 8]

# 反轉列表
print(numbers[::-1])  # 輸出:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

切片參數詳解

起始索引(start)

  • 默認值:0(序列的開頭)。
  • 說明:指定從序列的哪個位置開始切片。

示例:

letters = ['a', 'b', 'c', 'd', 'e']

print(letters[2:])  # 輸出:['c', 'd', 'e']

結束索引(stop)

  • 說明:指定在哪個位置結束切片,但不包含該位置的元素。

示例:

letters = ['a', 'b', 'c', 'd', 'e']
print(letters[:3])  # 輸出:['a', 'b', 'c']

步長(step)

  • 默認值:1(逐個元素訪問)。
  • 說明:指定切片時的間隔。

示例:

letters = ['a', 'b', 'c', 'd', 'e']
print(letters[::2])  # 輸出:['a', 'c', 'e']

負索引與切片

Python 支持負索引,從序列的末尾開始計數。

示例:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 獲取最後三個元素
print(numbers[-3:])  # 輸出:[7, 8, 9]

# 反向切片(從右向左)
print(numbers[-1:-6:-1])  # 輸出:[9, 8, 7, 6, 5]

切片的常見操作

複製序列

透過切片,可以輕鬆複製一個序列。

示例:

original = [1, 2, 3]
copy = original[:]
print(copy)  # 輸出:[1, 2, 3]

修改序列的部分元素

示例:

numbers = [0, 1, 2, 3, 4, 5]

# 將索引 2 到 4 的元素替換為 [20, 30, 40]
numbers[2:5] = [20, 30, 40]
print(numbers)  # 輸出:[0, 1, 20, 30, 40, 5]

刪除序列的部分元素

示例:

letters = ['a', 'b', 'c', 'd', 'e']

# 刪除索引 1 到 3 的元素
del letters[1:4]
print(letters)  # 輸出:['a', 'e']

切片在多維序列中的應用

對於多維序列(如二維列表),切片操作可以應用於每一維度。

示例:

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 獲取前兩行
print(matrix[:2])  # 輸出:[[1, 2, 3], [4, 5, 6]]

# 獲取第二列
column = [row[1] for row in matrix]
print(column)  # 輸出:[2, 5, 8]

# 獲取子矩陣
sub_matrix = [row[:2] for row in matrix[:2]]
print(sub_matrix)  # 輸出:[[1, 2], [4, 5]]

切片的實際應用

字串處理

示例:

text = "Python is fun!"

# 獲取單詞 "Python"
word = text[:6]
print(word)  # 輸出:Python

# 反轉字串
reversed_text = text[::-1]
print(reversed_text)  # 輸出:!nuf si nohtyP

分割檔案路徑

示例:

path = "/usr/local/bin/python"

# 獲取檔案名
filename = path.split('/')[-1]
print(filename)  # 輸出:python

# 獲取路徑
directory = '/'.join(path.split('/')[:-1])
print(directory)  # 輸出:/usr/local/bin

數據分析

在處理大量數據時,可以使用切片來選取需要的部分。

示例:

data = [i for i in range(100)]

# 獲取前 10 個數據
first_ten = data[:10]

# 每隔 5 個數據取一個
every_fifth = data[::5]

常見錯誤與注意事項

切片不包含結束索引位置的元素

說明:

numbers = [0, 1, 2, 3, 4]

# numbers[1:3] 只包含索引 1 和 2 的元素

print(numbers[1:3])  # 輸出:[1, 2]

步長為零時會引發錯誤

示例:

# 這將引發 ValueError
print(numbers[::0])

錯誤訊息:

ValueError: slice step cannot be zero

切片不會引發索引超出範圍的錯誤

示例:

print(numbers[2:10])  # 輸出:[2, 3, 4]

結論

切片是 Python 中處理序列資料的重要工具,透過靈活運用切片,您可以高效地操作列表、字串和元組等序列結構。

建議新手多加練習,嘗試在不同的情境下使用切片,這將有助於您更深入地理解 Python 的序列操作。


延伸閱讀

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *