1. 程式人生 > >Python中切片(Slicing)的運用(:運算子)

Python中切片(Slicing)的運用(:運算子)

總結:
1,對切片賦值,相當於替代原list中的切片部分,賦值的list不必與切片長度一致,也可以將切片賦值給新的變數,用以取原list中的一部分;
2,list中的元素在切片中可以用正數索引或負數索引表示,正向索引為0,1,2……,第一個元素索引為0;負向索引-1,-2,-3,……最後一個元素索引-1;
3,可以指定間隔進行切片。

侷限:
只能對連續段或固定間隔的元素進行切片,無法對多段元素進行提取。我會在後面的部落格中探討對列中更復雜的切割合併問題。

切片Slicing是python非常有用的一個功能,用運算子:實現,這個運算子很強大,有時候也有一點複雜,我簡單梳理一下作為入門者的一些參考。

當你需要一個序列的子串的時候,你就可以使用切片操作。例如:

a = ['a','b','c','d','e','f','g']
在a這個序列中,如果你想擷取裡面['c','d','e']這個子序列,那麼你就可以使用切片a[2:5]
它的語法形式是a[start:end],這裡有一個區間邊沿取值的問題。首先你要明確序列的索引是從0開始的,a[2:5]取值的範圍是[2,5),前面是閉區間,後面是開區間,也就是2<=索引值<5這段區間裡的元素。所以如果這樣來切的話:a[1:1],得到的就是[],空序列。

索引也可以為負,從後往前依次是-1,-2,-3,……

nums = range(5)    # 建立一個從0-5的list
print nums         # 打印出 "[0, 1, 2, 3, 4]"
print nums[2:4] # 得到索引從2(包括)到4(不包括)的切片; 列印 "[2, 3]" print nums[2:] # 得到索引從2(包括)以後的切片;列印 "[2, 3, 4]" print nums[:2] # 得到索引從開始到2(不包括)的切片;列印 "[0, 1]" print nums[:] # 得到所有元素的切片,相當於啥也沒做; 列印["0, 1, 2, 3, 4]" print nums[:-1] # 索引可以為負,這裡得到從開始到索引為-1(最後一個元素,不包括); 列印["0, 1, 2, 3]" nums[2:4] = [
8, 9] # 對索引從2(包括)到4(不包括)的元素賦值,可以理解為用等號右邊的替代切片 print nums # Prints "[0, 1, 8, 9, 4]"

對切片賦值長度不等於切片長度時,依然可以複製,切片部分被賦值部分完全替代。

>>> a = ['a','b','c','d','e','f','g']
>>> a[2:5] = ['1','2']
>>> print a
['a', 'b', '1', '2', 'f', 'g']
>>> a = ['a','b','c','d','e','f','g']
>>> a[2:5] = ['1','2','3','4']
>>> print a
['a', 'b', '1', '2', '3', '4', 'f', 'g']
不僅能通過賦值改變原list的元素和長度,還可以將原list的切片賦值給新的list:
>>>a = ['a','b','c','d','e','f','g']
>>>b = a[2:7]
>>>print b
['c', 'd', 'e', 'f', 'g']

指定間隔提取切片,下面以間隔3為例,即在切片範圍內每3個元素取一個:

>>>a = ['a','b','c','d','e','f','g','h','i','j','k']
>>>b = a[2:9:3]
>>>print b
['c', 'f', 'i']

索引為負數時,可以產生相同的結果:

>>>a = ['a','b','c','d','e','f','g','h','i','j','k']
>>>b = a[-9:-2:3]
>>>print b