1. 程式人生 > >Python高階特性-切片(Slice)

Python高階特性-切片(Slice)

切片(Slice)

如何在一個數組中取特定的一組資料?
是一個個指定?

>>> L = range(10)
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L[0]
0
>>> L[1],L[2],L[3]
(1, 2, 3)
>>> 

資料少還行,要是資料多呢?迴圈怎麼樣?

>>> L = range(10)
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i in range(3
): ... print L[i] ... 0 1 2 >>>

這個迴圈是單個輸出,要是需要輸出陣列還要做一下修改

>>> L = range(10)
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> r = []
>>> for i in range(3):
...     r.append(L[i]) #add L[i] for list r in the end 
... 
>>> r
[0, 1, 2]
>>> 

如果不需要連續取數,而是要間隔取數呢?有點要瘋的感覺吧?是不是感覺很麻煩?Python提倡的”優雅”,”簡潔”的特性何在?Python不能忍啊所以提出了切片

這種神奇的東東. 還是用上面的例子:

>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L[0:5] #
[0, 1, 2, 3, 4]
>>> L[:5] #若是從list的頭部開始索引,0可以省略.
[0, 1, 2, 3, 4]
>>> L[1:5]
[1, 2, 3, 4]

通過使用一個簡單的冒號:就能優雅的輸出陣列了,還要什麼迴圈!Python你的節操掉了!根據陣列的特性我們還可以倒著輸出.

>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L[-5:] [5, 6, 7, 8, 9] >>> L[-5:-1] #倒數第一個元素的索引是`-1` [5, 6, 7, 8]

這裡有個地方要注意比如某一個切片是這樣的L[x:y]其中必須x

>>> L = range(10)
>>> L[5:4]
[]

我還會大跳!

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

>>> L[:10:2]
[0, 2, 4, 6, 8]

100個數組中,沒5個取一個:

>>> L=range(100)
>>> L[::5] #L[:]是全部顯示的意思.
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

tuple,str,Unicode也是可以的

tuple也是一種list,不過tuple是不可變的,所以tuple也可以使用切片,不過輸出的還是tuple罷了.

>>> L=(1,2,3,4)
>>> L[:2]
(1, 2)

同樣stringxxx或Unicodeu'xxx'也是一種list,所以也可以使用切片.

>>> L='abcde'
>>> L[:2]
'ab'
>>> L='我來了'
>>> L[:2]
'\xe6\x88' 
>>> L=u'我來了'
>>> L[:2]
u'\u6211\u6765'
>>>