本篇將介紹Python的切片操作印机,切片支持的數(shù)據(jù)類型有列表、字符串、元祖腐魂,更多內(nèi)容請參考:Python學(xué)習(xí)指南
切片是什么蛔屹?
切片操作符是序列名后跟一個方括號兔毒,方括號中有一對可選的數(shù)字育叁,并用冒號分隔豪嗽。注意這與你使用的索引操作符十分相似。記住數(shù)是可選的计贰,而冒號是必須的。切片分隔符中的第一個數(shù)(冒號之前)表示序列開始的下標(biāo),第二個數(shù)(冒號之后)表示切片結(jié)束的下標(biāo),第三個數(shù)(冒號之后)表示切片間隔數(shù)挖帘。如果不指定第一個數(shù)拇舀,Python就從序列首開始逻族。如果沒有指定第二個數(shù)骄崩,則Python會停止在序列尾。注意要拂,返回的序列從開始位置開始 ,剛好在 結(jié)束 位置之前結(jié)束脱惰。即開始位置是包含在序列切片中的搏嗡,而結(jié)束位置被排斥在切片外采盒。這樣抽碌,shoplist[1:3]返回從位置1開始决瞳,包括位置2痴颊,但是停止在位置3的一個序列切片,因此返回一個含有兩個項(xiàng)目的切片屡贺。
shoplist[:]返回整個序列的拷貝蠢棱。shoplist[::3]返回位置3,位置6,位置9...的序列切片甩栈。也可以用負(fù)數(shù)做切片泻仙,負(fù)數(shù)用在從序列尾開始計(jì)算的位置。例如量没,shoplist[::-1]會返回倒序序列切片玉转。
切片的操作
取一個list或tuple的部分元素時非常常見的操作。比如殴蹄,一個list如下:
>>>L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
#取前三個元素
>>>L[0:3]
['Michael', 'Sarch', 'Tracy']
如果第一個索引是
0
究抓,還可以省略
L[:3]
['Michael', 'Sarch', 'Tracy']
#從索引1開始猾担,取出2個元素
>>>L[1:3]
['Sarch', 'Tracy']
類似的,既然Python支持L[-1]
取倒數(shù)第一個元素刺下,那么它同樣支持倒數(shù)切片绑嘹,試試:
>>>[-2:]
['Bob', 'Jack']
>>>L[-2:-1]
['Bob']
記住,倒數(shù)第一個元素的索引是
-1
切片操作十分有用橘茉,我們先創(chuàng)建一個0-99的數(shù)列:
>>>L = list(range(100))
>>>L
[0,1,2,3,4,...,99]
可以通過切片輕松取出某一段數(shù)列工腋。比如前10個數(shù):
>>>L[:10]
[0,1,2,3,4,5,6,7,8,9]
#后10個數(shù)
>>>L[-10:]
[90,91,92,93,94,95,96,97,98,99]
#前11-20個數(shù)
>>>[10:20]
[10,11,12,13,14,15,16,17,18,19]
#前10個數(shù),每2個取一個:
>>>L[:10:2]
[0,2,4,6,8]
#所有數(shù)捺癞,每5個取一個:
>>>L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
#什么都不寫夷蚊,只寫[:]就可以原樣復(fù)制一個list
>>>L[:]
[0,1,2,3,...,99]
tuple
tuple也是一種list,唯一區(qū)別是tuple不可變髓介。因此惕鼓,tuple也可以用切片操作,只是操作的結(jié)果仍是tuple:
>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)
字符串
字符串'xxx'也可以看成是一種list唐础,每個元素就是一個字符箱歧。因此,字符串也可以用切片操作一膨,只是操作結(jié)果仍是字符串:
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'
在很多編程語言中呀邢,針對字符串提供了很多各種截取函數(shù)(例如,substring)豹绪,其實(shí)目的就是對字符串切片价淌。Python沒有針對字符串的截取函數(shù),只需要切片一個操作就可以完成瞒津,非常簡單蝉衣。