我注意到,鉴于l = [1,2,3]
,l[-1:]
按预期返回[3]
,但l[-1:0]
返回[]
,非常不同于我的预期。然后我尝试了[-1:1]
,我期望它返回[3,1]
,但它也返回[]
。
有没有一个很好的理由说明切片语法没有从负指数到正指数(反之亦然)?
它似乎非常有用并且非常简单易用,但也许我错过了一些东西。
切片有一个非常简单的定义:只要你低于start
,你就会从step
跳过stop
。如果start
或step
为负数,则首先添加数组的长度。
有一次你的建议导致令人厌烦的行为是:
x[10:-10]
如果x[-10]
在x[10]
之后,你想要从x[10]
切片到x[len(x)-10-1]
。如果你有环绕,你将有切片x[10:] + x[:-10]
,这是无用的。
使用当前行为很容易模拟环绕行为(例如x[m:] + x[:n]
),但是当前更有用的行为很难用环绕模拟。
Guido van Rossum,Python语言的最初发明者,在这里有一篇关于切片语法的博文:
http://python-history.blogspot.fi/2013/10/why-python-uses-0-based-indexing.html
我不相信有任何特殊原因导致它不起作用。也许这个想法在撰写初始语法时并没有超越Guido的想法,也许是因为清晰。在任何情况下,为Python语法添加这些新功能为时已晚,因为它可能会破坏许多现有软件。
首先你需要知道python中的切片是从左到右所以当你尝试[3,1]
或[-1:1]
结果是空的!您可以假设列表中的每个条目都有2个索引,如下所示:例如,如果我们有一个包含4个条目的列表,则这是索引号:
[0,1,2,3,4]
要么
[-5,-4,-3,-1]
为了完全理解切片读取,请看这里:http://structure.usc.edu/numarray/node26.html