1. 程式人生 > >python 之 切片(slice)

python 之 切片(slice)

在python中有一個高階特性稱之為切片,其實之前我們在學習java的時候也接觸過Substring方法(俗稱取子串),而切片則和substring比較相似。
假如說我們要獲取列表或元組中的某個特定(全部)元素時,我們可以通過元素下標來使用,如:

alist = [3,4,5,6]
print(alist[0])           #獲取alist中的第一個元素

當我們遇到大量的資料的時候,使用元素下標來獲取整個列表的值就比較繁瑣,這個時候我們一般會採用for迴圈來解決:

alist = [3,4,5,6,7,9,11,13,15,17]
for item in alist:
    print(item)

其實吧,這裡可以採用更簡單的方法,就是使用切片:

alist = [3,4,5,6,7,9,11,13,15,17]
alist[::]

那麼問題來了,中間的兩個分號代表著什麼呢?
我們可以通過python官網查一下slice的用法:
python內建函式slice
得知slice的用法: slice(start, stop[, step])
其中:切片使用2個冒號分割的3個數字來完成;
第一個數字表示切片開始位置(預設為列表長度);
第二個數字表示切片截止(但不包括)位置(預設為列表長度);
第三個數字表示切片的步長(預設為1),當步長省略時可以順便省略最後一個冒號。
下面我們通過以下例子來深入瞭解一下其用法:

alist[::-1]      #逆序的所有元素
alist[::2]      #偶數位置,隔一個取一個
alist[1::2]       #奇數位置,隔一個取一個
alist[3::]     #從下標3開始的所有元素
alist[3:6]       #下標在[3,6]之間的所有元素
alist[0:100:1]     #前100個元素,自動截斷
alist[100:]       #下標100之後的所有元素,自動截斷
# alist[100]         #直接使用下標訪問會發生越界
alist[100:]

以上是通過切片獲取值的用法,當然,既然獲取了值,我們同樣也可以用切片來原地修改列表內容,下面同樣通過程式碼來演示以下:

alist = [3,5,7]
alist[ len(alist): ] = [9]     #在尾部追加元素
print(alist)
alist[:3] = [1,2,3]   #替換前三個元素
print(alist)

alist[:3] = []    #刪除前三個元素
print(alist)

#使用del與切片結合來刪除列表元素
alist = [3,5,7,9,11]
del alist[:3]       #刪除前三個元素
print(alist)

需要注意的是,我上面僅僅是以列表為例,不是說切片只適用於列表,切片適用於列表、元組、字串、range物件等型別,但作用於列表時功能最強大。

文章最後,總結一下切片的作用吧:

  1. 可以使用切片來擷取列表中的任何部分,得到一個新列表
  2. 也可以使用切片來修改和刪除列表中的部分元素
  3. 甚至可以通過切片操作為列表物件增加元素甚至可以通過切片操作為列表物件增加元素
  4. 切片操作不會因為下標越界而丟擲異常,而是簡單地在列表尾部截斷或者返回一個空列表,程式碼具有更強的健壯