如何解释Python切片语法list[::-1]中的第一个冒号
我最近看到了一段代码,讲的是如何反转一个序列。
>> l = [1,2,3,4,5,6]
>> print l[::-1]
输出结果
>> [6,5,4,3,2,1]
请问第一个冒号在括号里是什么意思呢?
2 个回答
2
some_list[start:end:step]
当你省略切片操作中的某些参数时,它们会使用默认值。
对于 start、end 和 step 的默认值是:
start - 切片开始的位置,默认是从索引0开始,当步长为正时,永远是0;
end - 切片结束的位置,默认是切片对象的长度(和range的规则一样),当步长为正时,永远是它的长度;
step - 默认的步长总是1。
如果你在步长前加上负号,省略其他参数,其实就是在说“返回一个反向的列表”。
编辑:有趣的是,
[1,2,3,4,5,6][5:-7:-1]
返回的结果和
[1,2,3,4,5,6][::-1]
在Python3中是一样的。有人能解释一下为什么吗?这意味着 start 和 end 的默认值实际上是依赖于步长参数(更具体地说,是它的符号)。
10
冒号后面没有值的意思是使用默认值。当步长为负数时,起始索引的默认值是 len(l)
,结束索引的默认值是 -len(l)-1
。所以,反向切片可以写成
l[len(l):-len(l)-1:-1]
这种形式。
l[start:end:step]
去掉默认值后,我们可以用更简短的写法 l[::-1]
。
了解这个问题可能会对你有帮助,可以看看关于 Python切片表示法 的内容。