python切片原理 深度解析Python切片

2021-10-11 01:23:10 字數 1970 閱讀 5256

詳解python 切片語法

python的切片是特別常用的功能,主要用於對列表的元素取值。使用切片也會讓你的**顯得特別pythonic。

切片的主要宣告如下,假設現在有乙個list,命名為alist:

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

切片語法的基本形式為:

alist[start:stop:step]

可以看出對於列表的切片操作有三個引數,分別為:

start:起始位置

stop:終止位置

step:步長

三個引數都是可選引數,意義為list的下標,即index。step引數預設值為1。表現形式有以下幾種:

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]

[2,3,4]

[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))]

python切片解析

切片原型 strs abcdefg strs start end step 切片的三個引數分別表開始,結束,步長 第一位下標為0 end 位不取,如 strs 1 3 bc 如果start end 超出現有陣列範圍,按實際範圍截斷 strs 100 100 abcdefg step為空時,預設值為 ...

python切片解析

切片原型 strs abcdefg strs start end step 切片的三個引數分別表開始,結束,步長 第一位下標為0 end 位不取,如 strs 1 3 bc 如果start end 超出現有陣列範圍,按實際範圍截斷 strs 100 100 abcdefg step為空時,預設值為 ...

spring mvc 原理深度解析

概要 spring mvc 設計思想與體系結構組成 mvc 執行流程解析 註解配置 jsp 執行過程回顧 spring mvc執行流程解析 mvc 體系結構 流程說明 請求servlet 處理業務邏輯 設定業務model forward jsp servlet jsp servlet 解析封裝htm...