python 列表分片

来源:互联网 发布:中国小镇 知乎 编辑:程序博客网 时间:2024/06/08 10:25
  • 列表可以通过索引值来获取列表中的一个元素
  • 但当需要一次性获取多个元素的时候, 就要使用列表的分片(slice)来实现
>>> param = [0, 1, 2, 3, 4, 5, 6, 7]>>> param[0:2][0, 1]
  • 实现的方式就是用一个冒号隔开两个索引值, 左边是开始位置, 右边是结束位置, 但结束位置上的元素是不包含的
  • 利用列表的分配得到的是 原来列表的拷贝, 原来的列表并没有发生改变

  • 列表分片也可以简写

>>> param = [0, 1, 2, 3, 4, 5, 6, 7]>>> param[:3][0, 1, 2]>>> param[1:][1, 2, 3, 4, 5, 6, 7]>>> param[:][0, 1, 2, 3, 4, 5, 6, 7]
  • 如果分片没有开始位置, 则默认开始位置是 0
  • 如果分片没有结束位置, 则默认结束位置是指定到列表最末尾
>>> param[:7][0, 1, 2, 3, 4, 5, 6]>>> param[:8][0, 1, 2, 3, 4, 5, 6, 7]>>> param[:9] # 注意结束位置超过列表的长度, 最后结束是到列表最后一个元素[0, 1, 2, 3, 4, 5, 6, 7]>>> param[:11][0, 1, 2, 3, 4, 5, 6, 7]

列表分片的进阶玩法

  • 列表分片操作实际上可以接收第三个参数, 代表的是 步长, 默认情况下是 1
>>> param = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10]>>> param[::2][0, 2, 4, 6, 8, 10]>>> 
  • 列表分片将步长值设置为-1, 则 相当于反转列表
>>> param = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10]>>> param[::-1][10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]>>> param[0:3:-1] # 反转是要整个列表..[]

题外话

  • 复制一个列表可以通过分片操作, 也可以通过列表内部方法copy
>>> param = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> a = param[:] # 这样相当于 copy方法>>> b = param.copy()>>> >>> param.append('我是最初的列表')>>> a.append('我是分片复制的列表')>>> b.append('我是调用内部方法复制的列表')>>> >>> param[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, '我是最初的列表']>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, '我是分片复制的列表']>>> b[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, '我是调用内部方法复制的列表']>>> 
  • 列表的翻转, 可以用分片设置步长为-1, 也可以用 内部方法reverse方法
  • 两者是有区别的, 分片是拷贝出新的列表, 即一个翻转的列表, 不会影响到原来的列表, 而内部方法reverse会将原来的列表翻转
>>> param = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> a = param[::-1]>>> a[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]>>> param[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> param.reverse()>>> param[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]