关于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的空值代表

 
 

原文地址:https://www.cnblogs.com/bbguo/p/8719927.html

时间: 2024-10-12 08:52:43

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

python学习日常-切片&amp;迭代&amp;列表生成式

切片:顾名思义,就是将一个东西切成一块一块的,python中的切片就是将数组切成一片一片的 L=list(range(1,100)); L(f:e:p)#f代表开始切的位置,e代表结束的位置(但不包括),p代表切的间隔. 比如L(10:26:2)代表从第10位开始切(即从数字为11开始)到26结束(即数字27),但是不包括第26位,其中间隔为2. 切片也支持从后面切比如L(-10:-1:none)就是从倒数第10位开始切到最后一位. 值得注意的是切片的三个参数都是可以缺省的. 迭代:非常简单的一

Python 列表切片

想必很多人都使用过列表的切片,通过切片可以从列表中获取一个或多个元素,但你真的了解切片? 一.一般玩法 >>> name = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] >>> name[0:2] # 获取 0 - 2 中间的元素,不包括索引为 2 的元素 ['a', 'b'] >>> name[:2] # 从 0 开始切,可省略 0 ['a', 'b'] >>> name[1:] # 同样地,切

Python列表、元组

序列是Python中最基本的最重要的数据结构,python内置的6种序列类型有list, tuple, string, unicode, buffer, xrange 序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推.并且序列都可以进行索引.检查成员.切片.加.乘等操作. 列表 列表属于可变数据类型 1.创建一个简单的列表: a = ['a','b','c']b = [1,2,3,4,,5] 2.读取列表的值: a[2] 结果为 c 3.删除: de

python 列表、元组 详解

python中有6种序列的内置类型,分别为:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象 列表和元组是最常见两种类型. 下面将以列表(list)和元组(tuple)为例对序列操作进行详细的讲解: 一.列表(list) 列表序列操作有:索引.切片.修改.追加.插入.删除.扩展.统计.排序(翻转).获取下标.拷贝 1. 索引 (list[i]) 列表的索引序号(又称为下标)如下图所示,该序列一共拥有n个元素, 从左到右索引是从 0 开始,  n-1 为最后一个元素 从

python列表(list)的使用技巧及高级操作

python列表(list)的使用技巧及高级操作置顶 2018年03月25日 13:39:41 顽劣的石头 阅读数:5478 标签: python extend bisect list enumerate 更多个人分类: python数据分析 Python版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/shaxiaozilove/article/details/79685168 1.合并列表(extend) 跟元组一样,用加号(+)将两个列表加起

JS数组方法与python列表方法的比较

JS的数组(Array)与python的列表(List)很相似,本人因为之前学过JS,后来学习python感觉有些方法很容易混淆,这里对常用的一些方法做些区分 增 删 改 查 排序 逆序 增加元素 1.添加元素到末尾 Array.push(x1, x2, x3, ...); //javascript中,可将1个或多个元素一次性添加到原数组末尾,原数组改变,返回值为原数组新长度 List.append(x) #python中,一次只能添加1个元素到原列表末尾,原列表改变,无返回值 2.添加数组(或

python列表,元组的操作

python的列表是用于存放一组数据,表示形式 用 [ ]来表示 1,列表的常用方法: names = ['!alex', 'eric', 'rain', '2kity'] names.append('knochkapoor') #增加一个元素 names.count('alex') #统计alex数量 names.insert(0,'jlliu') #在第一个位置插入'julliu' names.remove('jlliu') #删除'jlliu' names.pop() #不加参数默认删除最

Python列表的增删改查排

Python列表的增删改查排 一.列表的样子: a = ['q' , 'w' , 'e ', 'r','t'] a为列表名,[ ]为列表内容,' '为列表内的元素,'q'为a[0] 二.查(也称切片): print ( a[0] )          #取出列表中第一个元素 即:q print ( a[1:] )        #从第二个元素开始取到最后 即:['w', 'e','r', 't'] print ( a[1:3] )        #取出从第二个开始到第三个元素 即:['w','e

python列表和元组的方法和属性

python序列的共性 python序列包括列表和元组,序列都有索引,第一个元素索引为0,序列都可以进行索引.加.乘.切片.检查成员. python列表 列表是最常用的数据类型之一,通过[,,,]建立,可以给变量赋值空列表[].列表的数据项可以是不同类型的,可以嵌套. 列表的索引和字符串操作一样,同样可以截取例如a[1:2] / a[1:] / a[:3] 列表的更新: 1.修改:通过索引直接赋值来修改列表中的值. 2.新增:通过list.append(),在末尾处添加元素. 3.删除: A.通