1.切片:
通過指定下標的方式來獲得某一個數據元素,或者通過指定下標范圍來獲得一組序列的元素,這種訪問序列的方式叫做切片。
訪問某一個數據元素的的語法如下:
sequence[index] sequence是序列名,index是想要訪問的元素對應的偏移量,偏移量可以是正值,范圍是:0<=index<=len(sequence)-1;
也可以是負值,范圍是:-len(sequence)<=index<=-1
序列訪問多個元素,只需給出開始和結束的索引值,並且用冒號分隔就可以了,其語法如下:
sequence[starting_index:ending_index]
通過這種方式我們可以得到從起始索引到結束索引(不包括結束索引對應的元素)之間的一"片"元素.起始索引和結束索引都是可選的,如果沒有提供或者用None 作為索引值,切片操作會從序列的最開始處開始,或者直到序列的最末尾結束。
li = [1,2,3,4,5,6,7] print li[1:] #輸出[2,3,4,5,6,7],省略終止索引,表示取起始索引之后的所有值,等效於li[1:len(li)] print li[:3] #輸出[1,2,3],省略起始索引,表示從0開始取,等效於li[0:3] print li[:] #輸出[1,2,3,4,5,6,7],省略起始索引、終止索引、步長值表示取全部,等效於li[0:len(li):1] print li[::] #輸出[1,2,3,4,5,6,7],省略起始索引、終止索引、步長值表示取全部,等效於li[0:len(li):1] print li[::-1] #輸出[7,6,5,4,3,2,1],省略起始索引、終止索引,步長值為-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 "<pyshell#98>", line 1, in <module> a[len(a)] IndexError: list index out of range >>> a[-len(a)-1] Traceback (most recent call last): File "<pyshell#99>", line 1, in <module> a[-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]