1. 程式人生 > >關於python列表(list)切片[start:stop:step]的理解

關於python列表(list)切片[start:stop:step]的理解

執行 結果 實驗 變量名 列表 class start print 編譯

列表切片的語法
1 names=["bbguo","bbliang","bbxi","bbwang","bbbo","bbya","bbyi","bbqing"]
2 print(a[0:3:2])  #切片格式 變量名[start:stop:step],3個參數分別是切片的起始下標,停止下標和步長。


理解:

  1、切片的step的值是正還是負,決定切片的方向:
    1.1 即step為正數時(step>0),代表從左往右切片,即start下標值小於stop下標值,比如上面的列表,
1 names=["bbguo","bbliang","bbxi","bbwang","bbbo","
bbya","bbyi","bbqing"] 2 print(names[1:5:2]) #step為2,大於0,從左往右切,從start開始(含start的值"bbliang"),stop結束(不含stop的值"bbya"),語法邏輯要求start須小於stop才會認為語法正確,並執行切片操作,這裏start=1,stop=5,start<stop, 3 [bbliang, bbwang] #輸出結果

        1.2 當step為負數時(step<0),代表從右往左切片,即start下標值需要大於stop下標值,編譯器才可以判斷並執行切片操作。
1 names=["
bbguo","bbliang","bbxi","bbwang","bbbo","bbya","bbyi","bbqing"] 2 print(names[5:1:-2]) #step為-2,小於0,從右往左執行切片,從start開始(含start的值“bbya”),stop結束(不含stop的值"bbliang"),語法邏輯要求start須大於stop,編譯器才會認為語法正確執行切片操作,這裏start=5,stop=1,start>stop, 3 [bbya, bbwang] #輸出結果

  2、start、stop、step 為空值時的理解,空值得理解

    2.1 start的空值,即start的第一個值,當step為正的時候,start的空值為下標0,stop的空值為下標7,這裏這個例子就是:names[0] ;當step為負的時候,start的空值代表下標7,stop的空值代表下標0,列表的最後一個數據,即names[leng-1], 即star

    和stop的空值代表列表的頭和尾,依據step的是正還是負來顛倒,例子:

      step為1時:

1 names=["bbguo","bbliang","bbxi","bbwang","bbbo","bbya","bbyi","bbqing"]
2 print(names[::1]) #start為0,stop 為lenth(註意不是7,因為包含bbqing)
3 [bbguo, bbliang, bbxi, bbwang, bbbo, bbya, bbyi, bbqing] #輸出結果

      step為-1時:

1 names=["bbguo","bbliang","bbxi","bbwang","bbbo","bbya","bbyi","bbqing"]
2 print(names[::-1]) #start 為 lenth(註意不是7,包含bbqing),stop為0
3 [bbqing, bbyi, bbya, bbbo, bbwang, bbxi, bbliang, bbguo] #輸出結果

    2.2 step的空值代表默認1。

  3、列表下標,以及切片時start,stop的負值的理解:

    3.1 首先列表下標為負值時,即代表從列表右邊數起來倒數第幾個元素,比如names[-1]即代表,names這個列表右邊第一個元素。例子如下:

1 names=["bbguo","bbliang","bbxi","bbwang","bbbo","bbya","bbyi","bbqing"]
2 print (names[-1]) #-1下標代表列表的倒數第一個元素,即右邊第一個元素
3 bbqing  #輸出結果

    同理可以推出names[-2],names[-3]

    3.2 切片的start和stop為負值時,無論step是正還是負,start和stop的負值都代表的是列表從左到右的倒數第幾個元素。也就是說比如無論names[-1::1]、names[-1::-1],names[:-1:1]、names[:-1:-1],names[start]或者names[stop]的-1代表的都是names

    這個列表中倒數第一個數據(bbqing),step正負這裏只是用來判斷切片的方向,繼而查看切片的start和stop按照step的方向,是否有數據可以切片。當step>0時,比如step=1,由於names[-1::1]的start 位置以及是右邊的倒數第一個數據了,即這個列表

    的最後一個數據,所以按照step正數向右切片,所以stop的空值也是這個數據,所以根據切片包含start的邏輯,而stop空值右包含最後一個數據,所以names[-1::1]輸出結果將為bbqing。

    

1 names=["bbguo","bbliang","bbxi","bbwang","bbbo","bbya","bbyi","bbqing"]
2 print (names[-1::1])
3 [bbqing] #輸出結果

    3.2 當step為正,代表切片方向從左往右,如果切片的範圍區間不正確,沒有數據,輸出結果將為空值。舉例如下:

1 names=["bbguo","bbliang","bbxi","bbwang","bbbo","bbya","bbyi","bbqing"]
2 print(names[-4:5:-1]) #step-1,即代表從右往左切片,start值為-4,即右邊倒數第四個數據(bbbo),stop為5,即左邊數起第小標5的數據(bbya),從bbo開始,bbya結束,不符合-1從右往左切片的方向要求,所以切片區間內沒有值,輸出空值。
3 [] 輸出結果

綜上所有實驗數據得出的結論主要有一下3點:

  python的列表切片,1、方向由step確定,step為正時,從左往右切片,step為負時,從右往左切片。

           2、start和stop的正值代表列表下標,負值代表列表從左往右數起,倒數第幾個數據。

           3、start和stop的空值分別代表列表的頭尾的最後一個數據,至於start和stop空值的時候代表的是列表的頭還是尾,由step的正負值決定,即由step確定列表切片的方向後決定。當step為正時,即代表從左往右切片,則start的空值代表左邊的

           開頭,stop的空值代表右邊的結尾。當step為負值時,即代表從右往左切片,則start的空值代表右邊的開頭,stop的空值代表左邊的結尾。

           當step為負時,start的空值代表

 
 

關於python列表(list)切片[start:stop:step]的理解