python切片操作例題 Python之切片操作

2021-10-11 05:11:20 字數 2667 閱讀 9097

假設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的右邊,否則返回空字串或空列表,空元組....