切片
切片的語法表達式為:[start_index : end_index : step]
,其中:
start_index
表示起始索引end_index
表示結束索引step
表示步長,步長不能為0,且默認值為1
切片操作是指按照步長,截取從起始索引到結束索引,但不包含結束索引(也就是結束索引減1)的所有元素。
python3
支持切片操作的數據類型有list
、tuple
、string
、unicode
、range
- 切片返回的結果類型與原對象類型一致
- 切片不會改變原對象,而是重新生成了一個新的對象
下面列表為列:
圖列一
一個簡單的例子:
alist=['A','B','C','D','E','F'] ①alist[0:4:1]
②alist[0:4] 結果:['A', 'B', 'C', 'D'] ①和②結果一樣,因為步長有默認值為1 alist[0:4:2] 結果:['A', 'C']
省略start_index
,保留end_index
,這樣會從第一個元素開始,切到end_index - 1
的元素為止
alist[:4] ['A', 'B', 'C', 'D']
保留start_index
,但省略end_index
,這樣會從起始索引開始,切到最后一個元素為止:
alist[2:] ['C', 'D', 'E', 'F']
省略start_index
、end_index
和step
,這樣就表示就表示切片整個序列,也就是復制出了一個新的序列:
alist[:] ['A', 'B', 'C', 'D', 'E', 'F']
省略start_index
、end_index
,但保留step
,表示對整個序列,按照步長整除的規則取值:
alist[::2] ['A', 'C', 'E']
此時,如果我們將步長設為-1
,那么就可以很方便的得到一個反序的序列了:
alist[::-1] ['F', 'E', 'D', 'C', 'B', 'A']
下面這四種表達式是等價的:
alist[0:4] ['A', 'B', 'C', 'D'] alist[0:-2] ['A', 'B', 'C', 'D'] alist[-6:4] ['A', 'B', 'C', 'D'] alist[-6:-2] ['A', 'B', 'C', 'D']
觀察圖列一就可以得出,區間一致。
切片時,一定要保證start_index
到end_index
的方向與步長step
的方向同向,否則會切出空的序列:
alist[0:4:-1] [] alist[3:0:2] []
利用切片功能,編寫一個函數trim(str),類似Python中的strip()功能——去除字符串首尾的空格:
>>> def trim(str): ... while str[:1]==' ': ... str = str[1:] ... while str[-1:] == ' ': ... str = str[:-2] ... return str ... >>> trim(' abc hh welcome! ') 'abc hh welcome!'
路漫漫其修遠兮,吾將上下而求索。