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

Posted bibiguo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于python列表(list)切片[start:stop:step]的理解相关的知识,希望对你有一定的参考价值。

列表切片的语法
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]的理解的主要内容,如果未能解决你的问题,请参考以下文章

list列表切片方法汇总

Python 切片/列表/字符串之间装换

Python中的切片(Slice)操作详解

python基础语法列表的查询操作(包括切片)

python基础语法列表的查询操作(包括切片)

关于list的切片