Python切片語法圖像記憶法 一、角標序號的概念 二、切片語法

一、角標序號的概念

無論是字符串、列表還是元組,都被稱作【序列】,只要是序列就可以切片。而搞清楚序列的序號的定位方法,是一個基本功。

在Python裏,序號有兩種表達方式,一個是正向角標序號,一個是反向倒數序號
我定義的這兩個名字,會更利於中文語言環境的同學的理解和學習。

1)正向角標序號

一圖勝萬言:



有一個字符串序列”abcdef”,它的每一個字符的角標關係就是上圖所示。其實這個方法也叫【插空法】。想象序列中每一項之間都有一個空隙,我們就是把0,1,2,3,4,5……這個數數序列插到空隙中。對於每一項來說,它的左下角的角標就是自己的定位,大家都是對號入座的。

建立一個有效的模型,通過這樣一個明確的方法,至少我個人在平時列表序號時可以一步到位,不會數錯。

2)反向倒數序號

在做切片時,有時還會用到倒序號,其實很好辦,比如字母d就是倒數第3個,很符合中文的語言習慣,python的序號就是-3.

那麼他是什麼原理呢?你可以試着把上面的圖寫在一個紙條上,把它首尾相接,這個時候,f的右下角標和a的左下角標重合,都是0,像不像一個數軸?在數軸上,0的右側起,是1,2,3,4,……,0的左側起,自然就是-1,-2,-3,……了,很自然是不是?


再換一個角度,從負數開始插空,是不是還是左下角角標規則?神奇吧?~

這就是python的神奇之處,他很符合我們的數學邏輯,而且是一個統一、自洽的嚴謹邏輯。

二、切片語法

記住一句話:\color{red}{\underline{左閉右開,從左至右}}。總共分成三類,0個冒號1個冒號2個冒號

1)0個冒號

L = 'abcdef'
print(L[2])

\color{blue}{↑釋義:獲取開始位置是第3位(截至位置也是第4位之前,步長爲1)的元素。}

2)1個冒號

print(L[2:4])

\color{blue}{↑釋義:獲取開始位置是第3位、截至位置是第5位之前(步長爲1)的元素。}

print(L[2:-1])

\color{blue}{↑釋義:獲取開始位置是第3位、截至位置是倒數第1位之前(步長爲1)的元素。}

print(L[-1:-4])

\color{blue}{↑釋義:爲空,因爲左右顛倒。}

print(L[-4:-1])

\color{blue}{↑釋義:獲取開始位置是倒數第4位,截至位置是倒數第1位之前(步長爲1)的元素。}

print(L[:-4])

\color{blue}{↑釋義:獲取開始位置是第1位、截至位置是倒數第4位之前(步長爲1)的元素。}

print(L[-4:])

\color{blue}{↑釋義:獲取開始位置是倒數第4位、截至位置是最後一位的後面坑位之前(步長爲1)的元素。}

當序號是0時,冒號語法允許不寫0。最後兩個公式裏,其實是[0:-4]和[-4:0]。可以發現,只有位置是0時,可以左右顛倒,因爲0既可以表示第1位的序號數(在冒號左側時),也可以表示最後一位(在冒號右側時,因爲左閉右開),正因爲如此特殊,0纔可以省略不寫。



這其實又呼應了上一章節的反向倒數序號,f的右下側角標其實是0,再次驗證這種抽象模型的合理性。再好好看看這個模型,記住它。

2)2個冒號

如果你觀察得很仔細,前面的藍色註釋裏括號內的部分,正是每次省略冒號的默認值。

print(L[0:4:2])

第二個冒號後的數字是步長,它決定了前面所得到的子串 是從第一個開始第n個作爲下一個。

默認是1,就意味着,0:4首先取到前4個字符abcd,然後每+1個序號,取一個,直到都取完,那默認就是abcd,沒有變化。

如果是題目中的步長爲2,那麼就是取得到的abcd的第0位,第0+2位,第0+2+2位(此位不存在,不再往後累加2),那麼得到的是ac,你懂了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章