python列表切片正負數


理解列表切片正負數

先說結論:

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

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

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 的值
  1. 忽略 start 或 end

忽略 start ,則默認從索引0開始;忽略 end 位置,則截止到最后一個元素

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

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

>>> a[0:9:2]
[0, 2, 4, 6, 8]
  1. start,end 是正數還是負數,都無所謂!它們只代表起始和結束的位置, 僅此而已!譬如下面的例子,兩者等同
>>> a[-4:-1]  # 逆向的索引 [-4:-1],等同於正向的索引 [7:10]
[7, 8, 9]

>>> a[7:10]
[7, 8, 9]
  1. 起始位置在結束位置之后

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

>>> a[8:0]
[]

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

>>> a[-2:-2]  # start = end,相當於原地踏步,也獲取不到值
[]
  1. step 負數,從右往左開始取值,如果 start 在 end 左邊,同樣也取不到值
>>> a[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]  # 取值方向反了

>>> 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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM