以a = [1,2,3,4,5]作为一个例子.从我的直觉来看,我认为a[::-1]是一样的a[0:len(a):-1].但结果变成了错误:
>>> a = [1,2,3,4,5]
>>> print a[::-1]
[5, 4, 3, 2, 1]
>>> print a[0:len(a):-1]
[]
>>> print a[0:3:-1]
[]
>>> print a[0:2:-1]
[]
>>> print a[:2:-1]
[5, 4]
>>> print a[:0:-1]
[5, 4, 3, 2]
>>> print a[0:-1]
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
我实际上无法理解最后6次尝试的输出.谁能给我一些想法?谢谢吨.
Mat*_*hew 11
要使用的语法是[start:end:step]end不包含的地方.
Python遵循一些基于可能意味着的规则(可能它们不是你的意思,但语言设计者在那种情况下获得最终投票).我们将进一步研究确切的规则.
a[::-1]是一个反转列表的快捷方式.如果我们说没有任何界限向后工作,我们可能意味着从结束到开始.
a[0:len(a):-1]表示从0开始,按-1表示从len(a)开始.请注意,这是不可能的(我们最终会得到无数个负数),因此结果为空. a[0:3:-1]并a[0:2:-1]有同样的问题.
在最后一个示例中,a[0:-1]负一个索引表示最后一个元素.你可能意味着从开始到结束.请注意,终点不包括在内.这给出了除最后一个元素之外的所有元素(也可以指定为a[:-1]).
使用时a[:2:-1],您可以向后指定一个运动,因此您可能意味着从最后一个元素向后移动到2个索引.这给出[5,4]了你的例子.该a[:0:-1]情况是类似的,但运动发生之初,给人[5,4,3,2].
参考cpython源代码,我们可以看到实际的规则.
如果给出,则对开始值和结束值进行一些调整
请注意,在大多数情况下,规则确定可以精确给出的值以获得等效形式.例外情况是默认规则确定-1的起点或终点.如果我们给出该值,修改值的规则将改变它.
我们得到了这些规则
a[::-1] 使用start of length-1(默认值),结束-1(默认值)和步长-1a[0:len(a):-1],a[0:3:-1]并a[0:2:-1]使用给定的值a[:0:-1] 使用长度为1的开始(默认值),结束为0,步长为-1a[:2:-1] 使用length的长度为1(默认值),结束为2,步长为-1a[0:-1] 使用0的开头,长度为1的末尾(已修改)和步长为1(默认值)此时,我们可以确定是否可以进行选择.在空的情况下,由于步骤为负并且开始<结束,我们现在看到这是不可能的.
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |