我注意到,l = [1,2,3]
l[-1:]
按预期返回[3]
,但l[-1:0]
返回[]
,与我的预期非常不同。
然后我尝试了[-1:1]
,我希望返回[3,1]
,但它也会返回[]
。
有没有充分的理由说明切片语法没有从负指数转为正指数(反之亦然)?
它似乎非常有用且非常简单,但也许我错过了一些东西。
答案 0 :(得分:3)
切片有一个非常简单的定义:只要你低于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]
),但是当前更有用的行为很难用环绕模拟。
答案 1 :(得分:2)
最初的Python语言发明者Guido van Rossum在这里有一篇关于切片语法的博客文章:
http://python-history.blogspot.fi/2013/10/why-python-uses-0-based-indexing.html
我不相信它有什么特别的原因。也许这个想法在撰写初始语法时并没有超越Guido的想法,也许是因为清晰。无论如何,为Python语法添加这些新功能为时已晚,因为它可能会破坏许多现有软件。
答案 2 :(得分:0)
首先你需要知道python中的切片是从左到右所以当你尝试[3,1]
或[-1:1]
结果是空的时候!您可以假设列表中的每个条目都有2个索引,如下所示:用于考试
如果我们有一个包含4个条目的列表,则这是索引编号:
[0,1,2,3,4]
或
[-5,-4,-3,-1]
要完全理解切片读取,请查看此处:http://structure.usc.edu/numarray/node26.html