Python序列的切片操作與技巧

2021-06-19 23:27:43 字數 3740 閱讀 3915

序列(consequence)是python中一種資料結構,這種資料結構根據索引來獲取序列中的物件。

python中含有六種內建序列類:list, tuple, string, unicode, buffer, xrange。其中xrange比較特殊,它是乙個生成器,其他幾個型別具有的一些序列特性對它並不適合。

>

>

>a= 

'iloveyou'

>

>

>

len(a) 

8 >

>

>

max(a) 

'y' 

>

>

>

min(a) 

'i' 

>

>

>

bool('o' in a) 

true 

>

>

>

a + a 

'iloveyouiloveyou' 

>

>

>

a*3 

'iloveyouiloveyouiloveyou' 

>

>

>

a[1:4] 

'lov' 

>

>

>

a.index('y') 

5 >

>

>

a[5] 

'y' 

一般說來,具有序列結構的資料型別都可以使用:index, len, max, min, in, +, *, 切片。如:

切片操作

對於具有序列結構的資料來說,切片操作的方法是:consequence[start_index: end_index: step]。

start_index:表示是第乙個元素物件,正索引位置預設為0;負索引位置預設為 -len(consequence)

end_index:表示是最後乙個元素物件,正索引位置預設為 len(consequence)-1;負索引位置預設為 -1。

step:表示取值的步長,預設為1,步長值不能為0。

[注意]對於序列結構資料來說,索引和步長都具有正負兩個值,分別表示左右兩個方向取值。索引的正方向從左往右取值,起始位置為0;負方向從右往左取值,起始位置為-1。因此任意乙個序列結構資料的索引範圍為 -len(consequence) 到 len(consequence)-1 範圍內的連續整數。

切片操作會將按照給定的索引和步長,擷取序列中由連續的物件組成的片段,單個索引返回值可以視為只含有乙個物件的連續片段。

切片的過程是從第乙個想要的物件開始,到第乙個不想要的物件結束。第乙個想要的物件到第乙個不想要的物件之間的連續物件就是你所有想要的物件。

因此在consequence[start_index: end_index]中,切片中包含了consequence[start_index],但不包括consequence[end_index]。

切片的操作型別:

con[start_index]:返回索引值為start_index的物件。start_index為 -len(con)到len(con)-1之間任意整數。

con[start_index: end_index]:返回索引值為start_index到end_index-1之間的連續物件。

con[start_index: end_index : step]:返回索引值為start_index到end_index-1之間,並且索引值與start_index之差可以被step整除的連續物件。

con[start_index: ]:預設end_index,表示從start_index開始到序列中最後乙個物件。

con[: end_index]:預設start_index,表示從序列中第乙個物件到end_index-1之間的片段。

con[:]:預設start_index和end_index,表示從第乙個物件到最後乙個物件的完整片段。

con[::step]:預設start_index和end_index,表示對整個序列按照索引可以被step整除的規則取值。

在使用單索引對序列定址取值時,你所輸入的索引值必須是處於 -len(consequence) 到 len(consequence)-1 之間的值,否則會報錯提示索引值超出範圍。如:

>>> a=[1,2,3,4,5,6,7] 

>>> a[len(a)-1] 

7 >>> a[-len(a)] 

1 >>> a[len(a)] 

traceback (most recent call last): 

file ""

, line 1, 

ina[len(a)] 

indexerror: list index out

of range 

>>> a[-len(a)-1] 

traceback (most recent call last): 

file ""

, line 1, 

ina[-len(a)-1] 

indexerror: list index out

of range 

其中a[len(a)-1]等同於a[-1],a[-len(a)]等同於a[0],分別表示序列的最後乙個和第乙個物件。

當使用冒號(:)對序列進行切片取值時,你所輸入的無論是start_index或者end_index,都不必侷限於 -len(a) 和 len(a)-1 之間,因為只有當你輸入的索引號處於這個區間時才真正有效,而當你輸入的索引號超出這個範圍時,python會自動將start_index或end_index設定為預設值(即第乙個物件和最後乙個物件)。如:

>>> a[-100:100] 

[1, 2, 3, 4, 5, 6, 7] 

[注意]一定要記住,end_index其實是你第乙個不想要獲取的物件的索引,所以a[0:-1]是取不到a[-1]的,所以如果要使得切片片段包含end_index位置的物件,請預設end_index,或者輸入乙個超出end_index範圍的值。

利用步長對序列進行倒序取值

在切片運算中,步長為正,表示從左至右,按照索引值與起始位置索引之差可以被步長整除的規律取值;當步長為負,則表示從右至左,按照按照索引值與起始位置索引之差可以被步長整除的規律取值。

根據這個特性,我們可以很方便對某個序列進行倒序取值,這個方法比reverse方法更方便,且適用於沒有reverse方法的字串和元組。

>>> a=[1,2,3,4,5,6,7] 

>>> b=(1,2,3,4,5,6,7) 

>>> c='let me show you a little thing'

>>> a[::-1] 

[7, 6, 5, 4, 3, 2, 1] 

>>> b[::-1] 

(7, 6, 5, 4, 3, 2, 1) 

>>> c[::-1] 

'gniht elttil a uoy wohs em tel'

>>> a 

[1, 2, 3, 4, 5, 6, 7] 

>>> b 

(1, 2, 3, 4, 5, 6, 7) 

>>> c 

'let me show you a little thing'

>>> a.reverse() 

>>> a 

[7, 6, 5, 4, 3, 2, 1] 

相對reverse而言,切片的方法不會改變列表的結構,所以這是在實際應用中比較有用的乙個技巧。

Python序列的切片操作與技巧

序列 序列 consequence 是 python 中一種資料結構,這種資料結構根據索引來獲取序列中的物件。python 中含有六種內建序列類 list,tuple,string,unicode,buffer,xrange。其中 xrange 比較特殊,它是乙個生成器,其他幾個型別具有的一些序列特...

Python 序列的切片操作與技巧

序列 序列 consequence 是 python 中一種資料結構,這種資料結構根據索引來獲取序列中的物件。python 中含有六種內建序列類 list,tuple,string,unicode,buffer,xrange。其中 xrange 比較特殊,它是乙個生成器,其他幾個型別具有的一些序列特...

Python序列的切片操作

1 切片是python序列的重要操作之一,適用於列表元組 字串 range物件等型別 2 切片使用2個冒號分割3個數字來完成 第乙個數字表示切片的開始位置 預設為0 第二個數字表示切片截止 但不包含 位置 預設為列表長度 第三個數字表示切片的步長 預設為1 當步長省略時可以順便省略最後乙個冒號。3 ...