Python中[:]與[::]的用法
概述
[:]與[::]語法是通用序列操作(Common Sequence Operations)其中的兩個。用[:]或[::]對多數序列類型(可變的或不可變的)(如字符串、列表等)序列中元素進行截取。
[:]的用法
s[i:j]
從下標i到下標j,截取序列s中的元素。
- 如果i或j為負數,則下標從序列尾部算起,也就是說,下標i相當于下標len(s)+i,下標j相當于下標len(s)+j。另外,-0依然是0。
- 從序列s的下標i的元素(包含)到下標j的元素(不包含)之間所有元素,進行截取。另外,i < j。
- 若i或j大于len(s),則i或j被len(s)取代。
- 若i省略或i是None值,則i被0取代。
- 若j省略或j是None值,則j被len(s)取代。
- 若i>=j,返回沒元素的序列。
>>> a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[-1:]
[9]
>>> a[-9:-1]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> a[1:20]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:9]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> a[0:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[9:3]
[]
>>>
[::]的用法
s[i:j:k]
從下標i到下標j,步數為k,截取序列s中的元素。
- 如果i或j為負數,則下標從序列尾部算起,也就是說,下標i相當于下標len(s)+i,下標j相當于下標len(s)+j。另外,-0依然是0。
- 從序列s的下標i的元素(包含)到下標j的元素(不包含)之間,選取下標為i+n*k的元素(0 <= n < (j-i)/k),也就是說,選取下標為i, i+k, i +2*k, i+3*k等等的元素,直到下標大于等于j為止。
- 當k為正數,下標選取反向從0到len(s)-1。
- 當k為負數,下標選取反向從len(s)-1到0。
- 當i或j省略或是None值,則被端下標(0或len(s)-1)所取代(具體看k的正負符號)。
- k不能為0。若k為None值,則將k看成1。
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[1:10:2]
[1, 3, 5, 7, 9]
>>> a[1:10:3]
[1, 4, 7]
>>> a[1:10:-2]
[]
>>> a[1:10:-3]
[]
>>> a[10:1:-2]
[9, 7, 5, 3]
>>> a[10:1:-3]
[9, 6, 3]
>>> a[::2]
[0, 2, 4, 6, 8]
>>> a[::-2]
[9, 7, 5, 3, 1]
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[-9:-1:2]
[1, 3, 5, 7]
>>> a[-9:-1:-2]
[]
>>> a[-1:-9:-2]
[9, 7, 5, 3]
>>> a[-1::-2]
[9, 7, 5, 3, 1]
>>> a[:-1:2]
[0, 2, 4, 6, 8]
>>>
參考資料
- Common Sequence Operations
- python 中的[:-1]和[::-1]
- What is :: (double colon) in Python when subscripting sequences?