Python列表切片详解

本文详细介绍了Python列表切片的使用,包括[]、[:]和[::n]的含义。通过实例展示了如何进行翻转、间隔选取等操作,并探讨了切片索引的灵活性,如允许索引值超出序列长度。同时,文中提供了处理整个序列的技巧,如使用None作为索引。此外,还讨论了如何在循环中避免额外的print操作。
摘要由CSDN通过智能技术生成

Python列表切片详解[] [:] [::]

简介

Python切片是list的一项基本的功能,类似的代码

a = list[::10]

— 《Python核心编程中文版(第二版)》

解释一下[::n]的意思

>>> s = 'abcdefgh'
>>> s[::-1] # 可以视为翻转操作
output: 'hgfedcba'
>>>  s[::2]
output: 'aceg'

序列

  • 每一个元素通过指定一个偏移量的方式得到

  • 下标偏移量是从0开始到总元素数-1结束

序列类型操作符

序列操作符作用
seq[ind]获取下标为ind的元素
seq[ind1:ind2]获取下标从ind1到ind2间的元素集合
seq * expr序列重复expr次
seq1 + seq2连接序列seq1和seq2
obj in seq判断obje元素是否包含在seq中
obj not in seq判断obj元素是否不包含在seq中

切片操作符([], [:], [::]

  • 序列类型即包含一些顺序排列的对象的一个结构

  • 访问一个数据元素的语法如下

    sequence[index]

     

  • index是想要访问的元素对应的偏移量,

    • 可以为正:​

    • 可以为负:​,

  • 正索引以序列的开始为起点

  • 负索引以序列的结束为终点

  • 切片:一次性得到多个元素

     sequence[starting_index:ending_index]
    • 通过这种方式可以得到从起始索引到结束索引之间的一“片”元素(不包含结束索引对应的元素)

    • 具体方式

      • 整个切片:[:]

      • 部分切片:[0:3]

  • 用步长索引来进行扩展的切片操作

    • 多出来的第三个索引值被用做步长参数

    • 可以和range()中的步长参数,或者C/C++中的for语句中的步长参数类比

       >>> s = 'abcdefgh'
       >>> s[::-1] # 可以视作“翻转”操作
       'hgfedcba'
       >>> s[::2] # 隔一个取一个的操作
       'aceg'

       

更多内容

  • 切片索引的语法要比简单的单一元素索引灵活的多

  • 开始和结束索引值可以超过字符串的长度,

    • 即起始索引可以小于0,而对于结束索引,索引值为100的元素不存在并不会报错,即用100来作为一个长度不到100的序列的结束索引不会有什么问题

       >>> s = 'abcde'
       >>> i = -1
       >>> for i in range(-1, -len(s), -1)
               print(s[:i])
           abcd
           abc
           ab
           a

       

    • 问题是:如何在第一次迭代的时候显示整个字符串呢?是否一种方法不用在整个循环之前加入一个额外的print方法?如何定义一个索引,代表整个的序列?

      • 方案:使用另外一个小技巧:用None作为索引值,比如,在想用要给变量作为索引来从第一个到遍历最后一个元素的时候:

         >>> s = 'abcde'
         >>> for i in [None] + range(-1, -len(s), -1):
                 print(s[:i])
         output:
             abcde
             abcd
             abc
             ab
             a

         

      • 现在这个程序符合要求了。

      • 另外一种方法:先创建一个只包含None的列表,然后用extend()函数把range()的输出添加到这个列表,或者先建立range()输出组成的列表然后再把`None插入到这个列表的最前面,然后对这个列表进行遍历

        • 然而,可变对象的内建函数extend()根本就没有返回值,此方法不通

           >>> for i in [None].extend(range(-1, -len(s), -1)):
                   print(s[:i])
           output:
               error
           >>> for i in range(-1, -len(s), -1).extend([None]):
                   print(s[:i])
           正常输出
        • 错误发生的原因在于:[None].extend(…)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值