假設list的長度(元素個數)是length, start_index和stop_index在符合虛擬的邏輯位置關係時,
start_index和stop_index的絕對值是可以大於length的。比如下面兩個例子:
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[-11:11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[11:-11:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
另外start_index和stop_index都是可以省略的,比如這樣的形式 alist[:], 被省略的預設由其對應左右邊界起始元素開始擷取。
看一下具體的例項:
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
python中切片操作的實現機制
(注:python中前後雙下劃線名字的方法(函式)叫特殊方法,也有稱魔術方法的,這是從ruby那裡借用的。
通常特殊方法都是應當由直譯器去呼叫的,對程式設計師的介面通常是看起來更簡潔的方式,如常見的 len(list)
實質是直譯器呼叫list.__len__()方法。)
實際上在python中對list引用元素和形式優雅簡潔的切片操作都是由直譯器呼叫的list.__getitem__(x)特殊方法。
>>> help(list.__getitem__)
help on method_descriptor:
__getitem__(...)
x.__getitem__(y) <==> x[y]
其中x可以是個整數物件或切片物件。
alist[5] 和 alist.__getitem__(5) 是完全等效的。
>>> alist[5]
>>> alist.__getitem__(5)
而切片操作是把切片物件作引數呼叫__getitem__(),
>>> help(slice)
help on class slice in module builtins:
class slice(object)
| slice(stop)
| slice(start, stop[, step])
| create a slice object. this is used for extended slicing (e.g. a[0:10:2]).
見下面的例子。
>>> alist[1:7:2]
[1, 3, 5]
>>> slice_obj = slice(1,7,2)
>>> alist.__getitem__(slice_obj)
[1, 3, 5]
一些常用的切片操作
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 取前一部分
>>> alist[:5]
[0, 1, 2, 3, 4]
# 取後一部分
>>> alist[-5:]
[5, 6, 7, 8, 9]
# 取偶數字置元素
>>> alist[::2]
[0, 2, 4, 6, 8]
# 取奇數字置元素
>>> alist[1::2]
[1, 3, 5, 7, 9]
# 淺複製,等價於list.copy()更加物件導向的寫法
>>> blist = alist[:]
>>> blist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 返回乙個逆序列表,推薦reversed(list)的寫法,更直觀易懂。
>>> alist[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
# 在某個位置插入多個元素
>>> alist[3:3] = ['a','b','c']
>>> alist
[0, 1, 2, 'a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9]
# 在開始位置之前插入多個元素
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[:0] = ['a','b','c']
>>> alist
['a', 'b', 'c', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 替換多個元素
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[0:3] = ['a','b','c']
>>> alist
['a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9]
# 刪除切片
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del alist[3:6]
>>> alist
[0, 1, 2, 6, 7, 8, 9]
從上面這些例項可以看到python的切片操作非常靈活、強大、簡潔、優雅,如果能全面掌握和正確運用將會對你的編寫python**水平會有很大提公升。
python 切片操作
在說切片之前,我們不得不先說一下什麼是序列。序列 python中的一種資料結構,這種資料結構根據索引來獲取序列中的物件。在以後比較常見的資料結構中,列表 字典 字串都是序列。形式 slice start index end index step 一般情況下,步長是不寫的用預設值1,形式 slice ...
python切片操作
切片操作 切片是pytho序列及其重要的操作,適用於列表,元組,字串等,切片格式如下 切片slice操作可以讓我們快速提取子列表或修改,標準格式為 其實偏移量start 終止偏移量 end 步長 step 注意 當步長省略受順便可以省略第二個冒號 典型操作 三個量為正數的情況 如下 a 10,20,...
python切片操作
a b c 其中a是startindex,b是endindex,c是步長,負責控制方向,c正值為從左到右,startindex應該在endindex左邊,否則返回空字串或空列表,空元組.c為負值方向從右到左,a仍然是startindex,應該在endindex的右邊,否則返回空字串或空列表,空元組....