Python 第九講 切片

2021-07-11 23:56:12 字數 2516 閱讀 6157

切片

取乙個list或tuple的部分元素是非常常見的操作。比如,乙個list如下:

>>> l = ['michael', 'sarah', 'tracy', 'bob', 'jack']
取前3個元素,應該怎麼做?

笨辦法:

>>> [l[0], l

[1], l

[2]]

['michael', 'sarah', 'tracy']

之所以是笨辦法是因為擴充套件一下,取前n個元素就沒轍了。

取前n個元素,也就是索引為0-(n-1)的元素,可以用迴圈:

>>> r = 

>>> n = 3

>>>

for i in range(n):

...

>>> r

['michael', 'sarah', 'tracy']

對這種經常取指定索引範圍的操作,用迴圈十分繁瑣,因此,python提供了切片(slice)操作符,能大大簡化這種操作。

對應上面的問題,取前3個元素,用一行**就可以完成切片:

>>> l

[0:3]

['michael', 'sarah', 'tracy']

l[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引012,正好是3個元素。

如果第乙個索引是0,還可以省略:

>>> l

[:3]

['michael', 'sarah', 'tracy']

也可以從索引1開始,取出2個元素出來:

>>> l

[1:3]

['sarah', 'tracy']

類似的,既然python支援l[-1]取倒數第乙個元素,那麼它同樣支援倒數切片,試試:

>>> l

[-2:]

['bob', 'jack']

>>> l

[-2:-1]

['bob']

記住倒數第乙個元素的索引是-1

切片操作十分有用。我們先建立乙個0-99的數列:

>>> l = list(range(100))

>>> l

[0, 1, 2, 3, ..., 99]

可以通過切片輕鬆取出某一段數列。比如前10個數:

>>> l

[:10]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

後10個數:

>>> l

[-10:]

[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

前11-20個數:

>>> l

[10:20]

[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

前10個數,每兩個取乙個:

>>> l

[:10:2]

[0, 2, 4, 6, 8]

所有數,每5個取乙個:

>>> l

[::5]

[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

甚至什麼都不寫,只寫[:]就可以原樣複製乙個list:

>>> l

[:][0, 1, 2, 3, ..., 99]

tuple也是一種list,唯一區別是tuple不可變。因此,tuple也可以用切片操作,只是操作的結果仍是tuple:

>>> (0, 1, 2, 3, 4, 5)[:3]

(0, 1, 2)

字串'***'也可以看成是一種list,每個元素就是乙個字元。因此,字串也可以用切片操作,只是操作結果仍是字串:

>>> 

'abcdefg'[:3]

'abc'

>>>

'abcdefg'[::2]

'aceg'

在很多程式語言中,針對字串提供了很多各種擷取函式(例如,substring),其實目的就是對字串切片。python沒有針對字串的擷取函式,只需要切片乙個操作就可以完成,非常簡單。

有了切片操作,很多地方迴圈就不再需要了。python的切片非常靈活,一行**就可以實現很多行迴圈才能完成的操作。

第九講問題

第九講0.3工程編譯後執行時影象一閃而過,終端顯示 key frame size 0 double free or corruption out 已放棄 核心已轉儲 解決辦法 把cmakelists.txt中的 set cmake cxx flags std c 11 march native 03...

python的random模組 第九講

author michal date 2019 8 19 import random print help random random 獲取0 1的隨機數 print random.random 0.7273899166500218 choice從可變seque中隨機挑選幾個出來 print ran...

第九講 變數替換

變數替換,替換變數中的字元 變數替換的基本形式 變數名 被替換字元 替換字元 替換字元 會替換變數中每個 被替換字元 先來看個例子 echo off rem 設定乙個變數 set var qq大戰360 rem 替換變數中的 大戰 為 pk 顯示出來 echo var 大戰 pk pause rem...