python序列的切片很基礎同時也很重要,最近看到乙個[::-1]的表達,不明所以,查了一些資料並實際操作,對python切片有了更深刻的認識,以下結合例子詳細說明。
先看下切片的基本語法,一般認為切片語法是[n:m],是個半閉合區間,等效於數學上[n,m)取值範圍,取n不取m, n和m都可以省略,n看下面的例子,通過控制step可以更靈活的取資料,wonderful!
>>>s[1, 2, 3, 4, 5, 6, 7, 8]
>>>s[::]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> s[::1]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> s[::2]
[1, 3, 5, 7]
那step = -1是什麼意思?[::-1]實操的結果如何,如何解釋?
>>> s[::-1][8, 7, 6, 5, 4, 3, 2, 1]
查詢得知s可以為負數,並且s的正負對取切片的行為有影響,什麼影響?2個方面:
1.影響n,m的預設值
2.影響切片取值方向
s預設為1,如果》0,取切片從左向右取,預設n=0,m=len(s)
>>>s[0:len(s)][1, 2, 3, 4, 5, 6, 7, 8]
因為是從左往右取,所以要求nm,從左往右取,-2位置上在-1的左邊,所以取不到,第二個n=-2,m=-1,從-2向右-1取,得7,符合上述規則!
>>> s[-1:-2]>>> s[-2:-1]
[7]
如果s<0,會如何
預設值:n= -1,m = -len(s)-1
方向:從右向左取
這就解釋了[::-1]的結果,[::]代表取全序列,-1代表從右向左取步長為1
>>> s[::-1][8, 7, 6, 5, 4, 3, 2, 1]
等效於
>>> s[-1:-len(s)-1:-1][8, 7, 6, 5, 4, 3, 2, 1]
理解了以上原則,就容易理解以下切片的結果了,可以看到此時,例1,n>m,但可以取到值,例2,n
>>> s[-1:-2:-1][8]>>> s[-2:-1:-1]
總之s的正負會影響切片取值方向,使用中需要特別注意。
補充:上述結論也可以解釋以下切片結果:
>>> s="hello world"
>>> s[-5:0]
''>>> s[-5:-1]
'worl'
>>> s[-5:1]
''>>> s[-5:0:-1]
'w olle'
>>> s[-5:1:-1]
'w oll'
>>>
python深入 Python的深入理解
處理檔案和目錄 python 3 帶有乙個模組叫做 os,代表 作業系統 operating system os 模組 包含非常多的函式用於獲取 和修改 本地目錄 檔案程序 環境變數等的資訊。python 盡最大的努力在所有支援的作業系統上提供乙個統一的api,這樣你就可以在保證程式能夠在任何的計算...
深入理解Python類
c 中,類有兩個關鍵的內建函式,建構函式和析構函式。在python中,其實也有類似的函式,他們就是 def init self pass def del self pass def enter self pass def exit self pass在物件建立時執行操作。在物件析構時執行操作。注意 ...
Python的深入理解
處理檔案和目錄 python 3 帶有乙個模組叫做 os,代表 作業系統 operating system os 模組 包含非常多的函式用於獲取 和修改 本地目錄 檔案程序 環境變數等的資訊。python 盡最大的努力在所有支援的作業系統上提供乙個統一的api,這樣你就可以在保證程式能夠在任何的計算...