欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python切片操作深入詳解

 更新時(shí)間:2018年07月27日 11:20:15   作者:混沌鱷魚  
這篇文章主要介紹了Python切片操作,結(jié)合實(shí)例形式詳細(xì)深入的分析了Python切片操作的原理、參數(shù)屬性、相關(guān)函數(shù)及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python切片操作。分享給大家供大家參考,具體如下:

我們基本上都知道Python的序列對(duì)象都是可以用索引號(hào)來引用的元素的,索引號(hào)可以是正數(shù)由0開始從左向右,也可以是負(fù)數(shù)由-1開始從右向左。

在Python中對(duì)于具有序列結(jié)構(gòu)的數(shù)據(jù)來說都可以使用切片操作,需注意的是序列對(duì)象某個(gè)索引位置返回的是一個(gè)元素,而切片操作返回是和被切片對(duì)象相同類型對(duì)象的副本。

如下面的例子,雖然都是一個(gè)元素,但是對(duì)象類型是完全不同的:

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[0]
0
>>> alist[0:1]
[0]

通常一個(gè)切片操作要提供三個(gè)參數(shù) [start_index:  stop_index:  step]

start_index是切片的起始位置
stop_index是切片的結(jié)束位置(不包括)
step可以不提供,默認(rèn)值是1,步長(zhǎng)值不能為0,不然會(huì)報(bào)錯(cuò)ValueError。

當(dāng) step 是正數(shù)時(shí),以list[start_index]元素位置開始, step做為步長(zhǎng)到list[stop_index]元素位置(不包括)為止,從左向右截取,

start_indexstop_index不論是正數(shù)還是負(fù)數(shù)索引還是混用都可以,但是要保證 list[stop_index]元素的【邏輯】位置

必須在list[start_index]元素的【邏輯】位置右邊,否則取不出元素。

比如下面的幾個(gè)例子都是合法的:

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[1:5]
[1, 2, 3, 4]
>>> alist[1:-1]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> alist[-8:6]
[2, 3, 4, 5]

當(dāng) step 是負(fù)數(shù)時(shí),以list[start_index]元素位置開始, step做為步長(zhǎng)到list[stop_index]元素位置(不包括)為止,從右向左截取,

start_indexstop_index不論是正數(shù)還是負(fù)數(shù)索引還是混用都可以,但是要保證 list[stop_index]元素的【邏輯】位置

必須在list[start_index]元素的【邏輯】位置左邊,否則取不出元素。

比如下面的幾個(gè)例子都是合法的:

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[-1: -5: -1]
[9, 8, 7, 6]
>>> alist[9: 5: -1]
[9, 8, 7, 6]
>>> alist[-1:1:-1]
[9, 8, 7, 6, 5, 4, 3, 2]
>>> alist[6:-8:-1]
[6, 5, 4, 3]

假設(shè)list的長(zhǎng)度(元素個(gè)數(shù))是length, start_indexstop_index在符合虛擬的邏輯位置關(guān)系時(shí),

start_indexstop_index的絕對(duì)值是可以大于length的。比如下面兩個(gè)例子:

>>> 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_indexstop_index都是可以省略的,比如這樣的形式 alist[:], 被省略的默認(rèn)由其對(duì)應(yīng)左右邊界起始元素開始截取。

看一下具體的實(shí)例:

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Python中切片操作的實(shí)現(xiàn)機(jī)制

(注:Python中前后雙下劃線名字的方法(函數(shù))叫特殊方法,也有稱魔術(shù)方法的,這是從ruby那里借用的。

通常特殊方法都是應(yīng)當(dāng)由解釋器去調(diào)用的,對(duì)程序員的接口通常是看起來更簡(jiǎn)潔的方式,如常見的 len(list)

實(shí)質(zhì)是解釋器調(diào)用list.__len__()方法。)

實(shí)際上在Python中對(duì)list引用元素和形式優(yōu)雅簡(jiǎn)潔的切片操作都是由解釋器調(diào)用的list.__getitem__(x)特殊方法。

>>> help(list.__getitem__)
Help on method_descriptor:
__getitem__(...)
  x.__getitem__(y) <==> x[y]

其中x可以是個(gè)整數(shù)對(duì)象或切片對(duì)象。

alist[5]alist.__getitem__(5) 是完全等效的。

>>> alist[5]
5
>>> alist.__getitem__(5)
5
>>>

而切片操作是把切片對(duì)象作參數(shù)調(diào)用__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]
# 取偶數(shù)位置元素
>>> alist[::2]
[0, 2, 4, 6, 8]
# 取奇數(shù)位置元素
>>> alist[1::2]
[1, 3, 5, 7, 9]
# 淺復(fù)制,等價(jià)于list.copy()更加面向?qū)ο蟮膶懛?
>>> blist = alist[:]
>>> blist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 返回一個(gè)逆序列表,推薦reversed(list)的寫法,更直觀易懂。
>>> alist[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
# 在某個(gè)位置插入多個(gè)元素
>>> alist[3:3] = ['a','b','c']
>>> alist
[0, 1, 2, 'a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9]
# 在開始位置之前插入多個(gè)元素
>>> 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]
# 替換多個(gè)元素
>>> 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]

從上面這些實(shí)例可以看到Python的切片操作非常靈活、強(qiáng)大、簡(jiǎn)潔、優(yōu)雅,如果能全面掌握和正確運(yùn)用將會(huì)對(duì)你的編寫Python代碼水平會(huì)有很大提升。

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論