Python 序列操作之切片
前言
在Python所有序列中,有幾種通用的操作,包括:索引、切片、相加、相乘和成員資格的檢查。 其中切片算是 Python 的序列操作中比較特別的一種用法, 使用起來(lái)非常方便,并且功能也十分強(qiáng)大。今天主要總結(jié)關(guān)于切片的用法里面幾個(gè)容易出錯(cuò)的點(diǎn)。
切片的簡(jiǎn)寫
先來(lái)看個(gè)簡(jiǎn)答的示例:
>>> a = [1,2,3,4,5,6,7,8,9,10] >>> a[2:4] [3, 4] >>> a[1:5] [2, 3, 4, 5]如上所示,切片適合于提取序列的一部分,其中的編號(hào)非常重要:第一個(gè)索引是包含的第一個(gè)元素的編號(hào),但第二個(gè)索引是切片后余下的第一個(gè)元素的編號(hào)。
簡(jiǎn)而言之就是,提供兩個(gè)索引來(lái)指定切片的邊界,其中第一個(gè)索引指定的元素包含在切片內(nèi),但是第二個(gè)索引指定的元素不包含在切片內(nèi)。
如果要從列表末尾開(kāi)始數(shù),可使用負(fù)數(shù)索引,例如:
>>> a[-4:-1] [7, 8, 9]這樣好像不能輸出最后一個(gè)列表中最后一個(gè)數(shù)字。如果使用索引0,即到達(dá)列表末尾后再前進(jìn)一步所處的位置,結(jié)果如下:
>>> a[-4:0] []所以這里需要注意的是:在執(zhí)行切片操作時(shí),如果第一個(gè)索引指定的元素位于第二個(gè)索引指定的元素后面,那么結(jié)果就為空序列。
這里-4指定的元素為7,而0指定的元素為1,所以上面的語(yǔ)句返回為空序列。
那如果要輸出序列的最后一個(gè)值,可以使用一種簡(jiǎn)寫:如果切片結(jié)束于序列末尾,可省略第二個(gè)索引,如下:
>>> a[-4:] [7, 8, 9, 10]同樣,如果切片始于序列開(kāi)頭,可省略第一個(gè)索引:
>>> a[:4] [1, 2, 3, 4]那如果要復(fù)制整個(gè)序列,可以兩個(gè)索引都省略:
>>> a[:] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]更大的步長(zhǎng)
切片操作時(shí),我們通常顯式或隱士地指定起點(diǎn)和終點(diǎn),但通常省略另一個(gè)參數(shù),即步長(zhǎng)。在普通的切片中,步長(zhǎng)為1。
示例:
上面代碼顯式指定了步長(zhǎng)。如果步長(zhǎng)大于1,將跳過(guò)一些元素,比如上面指定步長(zhǎng)為2,那么將從七點(diǎn)和終點(diǎn)之間每隔一個(gè)元素提取一個(gè)元素。
使用步長(zhǎng)時(shí),前面兩個(gè)指定也可以省略,如下:
>>> a[::3] [1, 4, 7, 10]注意:步長(zhǎng)不能為0,否則無(wú)法移動(dòng)。
示例:
如果步長(zhǎng)為負(fù)數(shù),將從右到做提取元素。
示例如下:
如果是第一次接觸切片,對(duì)于上面的輸出結(jié)果,可能會(huì)有些意外,比如a[1:8:-2]輸出為空序列,這里是有點(diǎn)不太好理解,總結(jié)為以下幾點(diǎn),實(shí)在不懂,那就只能死記硬背啦。
1.當(dāng)步長(zhǎng)為負(fù)數(shù)時(shí),第一個(gè)索引必須比第二個(gè)索引大,否則輸出為空序列;
2.當(dāng)步長(zhǎng)為負(fù)數(shù)時(shí),可以省略起始或結(jié)束索引,省略索引后,就不存在一定要第一個(gè)索引必須比第二個(gè)索引大了
3.步長(zhǎng)為正數(shù)時(shí),索引從起點(diǎn)到終點(diǎn),而步長(zhǎng)為負(fù)數(shù)時(shí),索引從終點(diǎn)到起點(diǎn)。
切片在序列中用得非常多,但是有很多小細(xì)節(jié)需要注意,要不然很容易出錯(cuò),也正是因?yàn)檫@些特殊的語(yǔ)法,才體現(xiàn)了 Python 與其它語(yǔ)言的不同之處吧。
本文知識(shí)點(diǎn)來(lái)源于書籍《Python 基礎(chǔ)教程》第三版。
總結(jié)
以上是生活随笔為你收集整理的Python 序列操作之切片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第一个 PyQt5程序
- 下一篇: Python中运算符 is 和 == 的