如何解释Python切片语法list[::-1]中的第一个冒号

4 投票
2 回答
4107 浏览
提问于 2025-04-18 00:33

我最近看到了一段代码,讲的是如何反转一个序列。

>> l = [1,2,3,4,5,6]
>> print l[::-1]

输出结果

>> [6,5,4,3,2,1]

请问第一个冒号在括号里是什么意思呢?

2 个回答

2
some_list[start:end:step]

当你省略切片操作中的某些参数时,它们会使用默认值。
对于 startendstep 的默认值是:
start - 切片开始的位置,默认是从索引0开始,当步长为正时,永远是0;
end - 切片结束的位置,默认是切片对象的长度(和range的规则一样),当步长为正时,永远是它的长度;
step - 默认的步长总是1。

如果你在步长前加上负号,省略其他参数,其实就是在说“返回一个反向的列表”。

编辑:有趣的是,

[1,2,3,4,5,6][5:-7:-1]

返回的结果和

[1,2,3,4,5,6][::-1]

在Python3中是一样的。有人能解释一下为什么吗?这意味着 startend 的默认值实际上是依赖于步长参数(更具体地说,是它的符号)。

10

冒号后面没有值的意思是使用默认值。当步长为负数时,起始索引的默认值是 len(l),结束索引的默认值是 -len(l)-1。所以,反向切片可以写成

l[len(l):-len(l)-1:-1]

这种形式。

l[start:end:step]

去掉默认值后,我们可以用更简短的写法 l[::-1]

了解这个问题可能会对你有帮助,可以看看关于 Python切片表示法 的内容。

撰写回答