Python 切片語法詳解

基礎概念

Python的切片是特別經常使用的功能,主要用於對列表的元素取值。使用切片也會讓你的代碼顯得特別Pythonic。bash

切片的主要聲明以下,假設如今有一個list,命名爲alist:spa

alist = [0,1,2,3,4]
複製代碼

切片語法的基本形式爲:code

alist[start:stop:step]
複製代碼

能夠看出對於列表的切片操做有三個參數,分別爲:數學

  • start:起始位置
  • stop:終止位置
  • step:步長

三個參數都是可選參數,意義爲list的下標,即index。step參數默認值爲1。表現形式有如下幾種:class

alist[start:stop]
alist[start:]
alist[:stop]
alist[:]
複製代碼
  • 第一種方式指定了start與stop參數,從start指定的下標開始取alist的元素,直到stop-1,例如a[1:3]的結果爲[1,2]
  • 第二種方式會從start指定的下標開始,取alist剩餘元素。例如a[1:]會獲得[1,2,3,4]
  • 第三種方式會從alist的開始,取list元素,直到下標爲stop-1,例如a[:4]會獲得結果[0,1,2,3]
  • 第四種方式沒有指定start與stop參數,則會返回整個列表。

須要注意的是,:stop表示不在選定切片中的第一個值,alist[start:stop]的取值相似於數學中的取值範圍爲[start, stop), 因此在步長默認爲1的狀況下,start-stop的結果即爲所取元素的數量。基礎

負值用法

start與stop參數爲負值

start與stop的值能夠是負值,表示取值是從list的最後開始,而不是開頭。 例如:原理

alist[-1]
alist[-3:]
alist[:-1]
複製代碼
  • 第一種寫法表示取alist的最後一個值,輸出爲4。
  • 第二種寫法表示,從alist的倒數第三個值開始,取list剩下的元素,輸出爲[2,3,4]
  • 第三種寫法表示,從alist的開始取list中的元素,直到下標爲倒數第一個值,輸出爲[0,1,2,3]

step參數爲負值

step爲負值時候表示將列表逆向,最簡單的例子以下:語法

alist[::-1]
複製代碼

輸出結果爲[4,3,2,1,0]。這個例子實際是如下面的這個形式返回,總結

[alist[-1], alist[-1-step], ..., alist[0]]
複製代碼

即從倒數第一個元素開始,每一步加上步長,由於這裏步長爲負數,因此是減法,直到alist的開頭。 知道這個原理,就能明白一些加上了start與stop參數的複雜寫法,例如:命名

指定了start參數

alist[1::-1]
複製代碼

其實是這樣返回:

[alist[1], alist[1-step], ..., alist[0]]
複製代碼

所以,返回的是[1,0]

指定了stop參數

alist[:1:-1]
複製代碼

其實是這樣返回:

[alist[-1], alist[-1-step], ..., alist[stop+1]]
複製代碼

所以,返回的是[4, 3, 2]

同時指定了start與stop參數

注意,因爲是逆序,因此start參數應該大於stop參數。

alist[3:1:-1]
複製代碼

其實是這樣返回:

[alist[start], alist[start-step], ..., alist[stop+1]]
複製代碼

所以,返回的是[3,2]

咱們能夠看出,

  • 若是指定了start參數,則從start參數index開始取元素,直到遇到stop下標或者list的第一個元素。
  • 若是未指定start參數,則從list倒數第一個元素開始,直到遇到stop下標或者list的第一個元素。

總結

切片語法的使用特別靈活,若是正確掌握了它的用法,可以簡化你的代碼。須要注意的是,Python也提供了slice類用於製造切片,例如:

alist[start:stop:step]
複製代碼

實際上等價於

alist[(slice(start,stop,step))]
複製代碼
相關文章
相關標籤/搜索