1. 程式人生 > >python學習之路(11)

python學習之路(11)

復制 slice 切片 sds [1] adas 代碼 bsp clas

切片


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

>>> list=[zh,cn,sqlmap,nmap,znamp]

取前3個元素,應該怎麽做?

笨辦法:

>>> list=[zh,cn,sqlmap,nmap,znamp]
>>> list1=[list[0],list[1],list[2]]
>>> list1
[zh, cn, sqlmap]

之所以是笨辦法是因為擴展一下,取前N個元素就沒轍了。

取前N個元素,也就是索引為0-(N-1)的元素,可以用循環:

>>> r=[]
>>> n=3
>>> for i in range(n):
    r.append(list[i])

    
>>> r
[zh, cn, sqlmap]

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

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

>>> list[0:3]
[zh, 
cn, sqlmap]

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

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

>>> list[:3]
[zh, cn, sqlmap]

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

>>> list[2:4]
[sqlmap, nmap]

類似的,既然Python支持L[-1]取倒數第一個元素,那麽它同樣支持倒數切片,試試:

>>> list[-1]
znamp
>>> list[-2:]
[
nmap, znamp] >>> list[-3:-2] [sqlmap]

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

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

>>> list=range(100)
>>> list
range(0, 100)

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

>>> list[:5]
range(0, 5)

後10個數:

>>> list1=list[-10:]
>>> list1
range(90, 100)

前11-20個數:

>>> list[10:20]
range(10, 20)

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

>>> list[:10:2]
range(0, 10, 2)

所有數,每5個取一個:

>>> list[::5]
range(0, 100, 5)

甚至什麽都不寫,只寫[:]就可以原樣復制一個list:

list[:]
range(0,100)

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

>>> tuple=(1,2,3,4,5,6,7,8,9)
>>> tuple[:3]
(1, 2, 3)

字符串‘xxx‘或Unicode字符串u‘xxx‘也可以看成是一種list,每個元素就是一個字符。因此,字符串也可以用切片操作,只是操作結果仍是字符串:

>>> a=asdasdasdsadasdeqff
>>> a[-3:]
qff

python學習之路(11)