python列表中切片的正負數

嗨学编程發表於2024-05-14

先說結論:

列表切片的格式為[start: end: step]

其中 step 代表步長,即每從 start 位置開始每隔幾個元素取一個值

  • step 為正數時表示切片取值方向為:從左往右;為負數時:從右往左

  • start, end 代表切片取值的起始和結束位置,請注意這個詞:位置,我們假設可以取值的範圍是數學中 x 座標軸上的所有值,不管 start, end 它們是正數還是負數,都沒有關係,它們只代表切片的區間位置而已!順著取值方向(由 step 控制),start 的在 x座標軸上的位置應該在 end 的位置之前,否則會取不到值(譬如 step 是正數,start < end。step 為負數,start > end)

現有列表:[0,1,2,3,4,5,6,7,8,9,10]
列表元素 0 1 2 3 4 5 6 7 8 9 10
正向索引 0 1 2 3 4 5 6 7 8 9 10
逆向索引 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

注意:上面逆向索引的初始索引,從 -1 開始

切片格式:list[start: end: ​step]

  • start: 開始位置的索引,不寫預設為列表的開頭,即索引0

  • end: 結束位置的索引,不寫預設為列表的末尾

  • step: 步長,即每個幾個元素取一個值,不寫則預設為1; 當step為正數,取值方向從左往右,當step為負數,取值方向從右往左

1.左閉右開區間

列表的切片是左閉右開區間,取值時不包含 end 索引的值:

>>> a = [0,1,2,3,4,5,6,7,8,9,10]

>>> a[0:9]                    # 從0開始,取值到索引9.
[0, 1, 2, 3, 4, 5, 6, 7, 8]   # 但是注意:只能取值到 8,不包含索引為 9 的值

2.忽略 start 或 end

忽略 start ,則預設從索引0開始;忽略 end 位置,則截止到最後一個元素

>>> a[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # 忽略start,則起始位置為開頭;忽略end,到最後結束;
# 注意:忽略 end 可以獲取列表末尾的值,不會出現左閉右開區間的問題

3.step 不為1的情況

如step=2,則每從 start 開始,從左往右每隔 2 個元素取一個值

>>> a[0:9:2]
[0, 2, 4, 6, 8]

4.start,end 是正數還是負數,都無所謂!它們只代表起始和結束的位置, 僅此而已!
譬如下面的例子,兩者等同

>>> a[-4:-1]  # 逆向的索引 [-4:-1],等同於正向的索引 [7:10]
[7, 8, 9]

>>> a[7:10]
[7, 8, 9]

5.起始位置在結束位置之後

如下面的例子,step 預設為1,取值方向從左往右;此時如果 start 在 end 位置的右邊,就取不到值

>>> a[8:0]
[]

>>> a[-2:-10]
[]

>>> a[-2:-2]  # start = end,相當於原地踏步,也獲取不到值
[]

6.step 負數,從右往左開始取值,如果 start 在 end 左邊,同樣也取不到值

>>> a[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]  # 取值方向反了
#學習中遇到問題沒人解答?小編建立了一個Python學習交流群:153708845

>>> a[8:0]  # step為正數,從左往右取值,此時start在end右邊,取不到值
[]

>>> a[8:0:-1]  # step負數,從右往左取值,此時start在end右邊,就能取到值了
[8, 7, 6, 5, 4, 3, 2, 1]

>>> a[-2:0:-2]  # -2的正向索引是9,相當於 a[9:0:-2]
[9, 7, 5, 3, 1]

>>> a[0:9:-1]  # 此時取值方向是從右往左,但是 0 在 9 左邊,起始位置在結束位置之後,故取不到值
[]

擴充套件: range(start,stop,step)

python中的 range(start,stop,step) 也同理:

>>> list(range(1,20,-1))
[]

>>> list(range(20,1,-1))
[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]

>>> list(range(-1,-20,-1))
[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19]

相關文章