python筆記3高階特性

2021-07-12 06:26:45 字數 2534 閱讀 2172

切片

閱讀: 117822

取乙個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的切片非常靈活,一行**就可以實現很多行迴圈才能完成的操作。

Python學習筆記 高階特性3

我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable。可以使用...

Python3(高階特性)

1.例題答案 小寫化含有數字的list l2 s.lower for s in l1 if isinstance s,str true l2.insert key,value for key,value in enumerate l1 if isinstance value,int true l2注...

Python3 高階特性

可迭代物件 集合資料型別 list tuple dict set str generator,包括生成器和帶yield的generator function 可以採用collections模組的iterable型別判斷是否是可迭代物件 from collections import iterable...