倒序切片的一个例子 ,没有理解
L=['Adam','Lisa','Bart','Paul']
>>>L[-4:-1:2] ------->这个没理解
L=['Adam','Lisa','Bart','Paul']
>>>L[-4:-1:2] ------->这个没理解
2016-04-07
粘贴自己的以前在猿问里的回答给 题主:
————————————————————分隔线————————————————————————
楼主问的是列表,及Python中所有可迭代类型类型的 切片问题, 由于我电脑上装的是Python 3.x, 在 range() 这个内建函数上和泪珠的2.x 有些许差别:
2.x: range(start : stop : step) 生成 一个 从start开始(包含start)到stop结束(不包含stop),步长为 step 的列表(下称:list类型)
3.x range(start : stop : step) 生成一个 序列生成器(range 类型),在这里,range自成一种类型了, 不过 start, stop, step 的意义是一样的。
以上是两个版本Python的区别,扯开一句,Python 3.x 和2.x 的不兼容在前几年3.x 刚推出是 短时间内看对Python语言是一种伤害, 一种分裂。 但是站在2016的开端来看,各种常用的库都已经支持了3.x, 且3.x版本比2.x 版本在 各个方面都高级和合理了很多,所以建议初学者都从3.x 开始学习Python. range 的在3.x的改进就能看出: 在2.x 中产生一个list , 而3.x 中产生的是一个 生成器,在内存优化上更高一层。
好了扯远了, 写这些主要是为了说明 用3.x 演示代码和2.x 的区别: 在3.x 中 如果想保证 开头声明的L 是list ,如下:
L = list(range(1,101))
我们具体解释下 range(start : stop : step) 中三个暂称为 参数的作用和用法,以及一些小技巧:
1, start: 如上所说, 为列表(3.x 为 range 类型)的开始, 切片或者声明时 可以省略,省略默认 start为0。
2, stop: 列表的结束(不包含), 切片时可以省略,省略默认为列表的最后。
3, step: 为步长,即 列表中元素之间的差, 切片或者声明时 可以省略, 默认为1。
下面就range函数的各种省略的组合用代码 一一说明:
>>> list(range(3)) ## 声明时 省略 start 和 step [0, 1, 2] >>> list(range(1,3)) ## 声明时 省略 step [1, 2] >>> list(range(1,11,2)) ## 步长为2 [1, 3, 5, 7, 9] >>> list(range(11,1,-2)) ## 步长为负数 [11, 9, 7, 5, 3]
列表切片的start stop step 和 range函数 差不多:
>>> L= list(range(1,21)) ##声明 列表 L >>> print (L) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] >>> print(L[2:6]) ## 省略 step (步长), step默认为1 [3, 4, 5, 6] >>> print(L[2:10:2]) ## 显式声明 step 为2 [3, 5, 7, 9] >>> print(L[10:2:-2]) ## 显式声明 step 为 -2 [11, 9, 7, 5] >>> print(L[:19]) ## 省略 start, start 默认为0; 省略步长 step, 默认为1 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] >>> print(L[0::1]) ## 省略 stop , 默认到列表的结尾。 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
应该还有更多的写法, 3个位置: start, stop, step ; 且它们均可以为 正数 或负数。 题主可以自己试试。
举报