一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python切片操作深入詳解

Python切片操作深入詳解

2021-03-23 00:16混沌鱷魚 Python

這篇文章主要介紹了Python切片操作,結合實例形式詳細深入的分析了Python切片操作的原理、參數屬性、相關函數及操作注意事項,需要的朋友可以參考下

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

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

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

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

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

通常一個切片操作要提供三個參數 [start_index:  stop_index:  step]

start_index是切片的起始位置
stop_index是切片的結束位置(不包括)
step可以不提供,默認值是1,步長值不能為0,不然會報錯ValueError。

step 是正數時,以list[start_index]元素位置開始, step做為步長到list[stop_index]元素位置(不包括)為止,從左向右截取,

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

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

比如下面的幾個例子都是合法的:

?
1
2
3
4
5
6
7
>>> 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]

step 是負數時,以list[start_index]元素位置開始, step做為步長到list[stop_index]元素位置(不包括)為止,從右向左截取,

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

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

比如下面的幾個例子都是合法的:

?
1
2
3
4
5
6
7
8
9
>>> 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]

假設list的長度(元素個數)是length, start_indexstop_index在符合虛擬的邏輯位置關系時,

start_indexstop_index的絕對值是可以大于length的。比如下面兩個例子:

?
1
2
3
4
5
>>> 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[:], 被省略的默認由其對應左右邊界起始元素開始截取。

看一下具體的實例:

?
1
2
3
>>> 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)特殊方法。

?
1
2
3
4
>>> help(list.__getitem__)
Help on method_descriptor:
__getitem__(...)
  x.__getitem__(y) <==> x[y]

其中x可以是個整數對象或切片對象。

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

?
1
2
3
4
5
>>> alist[5]
5
>>> alist.__getitem__(5)
5
>>>

而切片操作是把切片對象作參數調用__getitem__()

?
1
2
3
4
5
6
7
>>> 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]).

見下面的例子。

?
1
2
3
4
5
6
>>> alist[1:7:2]
[1, 3, 5]
>>> slice_obj = slice(1,7,2)
>>> alist.__getitem__(slice_obj)
[1, 3, 5]
>>>

一些常用的切片操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
>>> 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程序設計有所幫助。

原文鏈接:https://blog.csdn.net/xpresslink/article/details/77727507

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 暖暖的视频完整视频韩国免费 | 欧美高清乌克兰精品另类 | 午夜无码国产理论在线 | 女性全身裸露无遮挡 | 亚洲AV无码一区二区三区乱子伦 | 白鹿扒开内裤露出尿孔 | 国产亚洲福利一区二区免费看 | 日本动漫打扑克动画片樱花动漫 | 国产欧美日韩免费一区二区 | 俺去俺也在线www色官网 | 国内揄拍国内精品久久 | 日韩精品一区二区三区老鸭窝 | 男人搡女人视频免费看 | 国产精品二区高清在线 | 完整秽淫刺激长篇小说 | 九九热免费在线观看 | 日本黄a三级三级三级 | 黑人video粗暴日本 | 四虎影视在线看免费 720p | 久久se视频精品视频在线 | 国产欧美精品一区二区三区四区 | 午夜dj影院在线观看完整版 | 久久久免费观成人影院 | 亚洲女性色尼古综合网 | 国产123区在线视频观看 | 国模孕妇季玥337p人体 | 成人1234| 毛片免费全部免费观看 | 四虎影视在线影院在线观看观看 | 99在线观看视频免费精品9 | 国产色司机在线视频免费观看 | 久久囯产精品777蜜桃传媒 | 4虎影视国产在线观看精品 4s4s4s4s色大众影视 | 久久人妻熟女中文字幕AV蜜芽 | 欧美专区视频 | 欧美同志video 在线观看 | 欧美影院一区二区 | 99久久精品自在自看国产 | 女人和男人搞基 | 驯服有夫之妇HD中字日本 | 国产麻豆流白浆在线观看 |