为什么python切片语法不会从负指数转为正指数?

时间:2014-09-30 10:14:03

标签: python slice

我注意到,l = [1,2,3] l[-1:]按预期返回[3],但l[-1:0]返回[],与我的预期非常不同。 然后我尝试了[-1:1],我希望返回[3,1],但它也会返回[]

有没有充分的理由说明切片语法没有从负指数转为正指数(反之亦然)?

它似乎非常有用且非常简单,但也许我错过了一些东西。

3 个答案:

答案 0 :(得分:3)

切片有一个非常简单的定义:只要你低于start,就可以跳过step stop。如果startstep为负数,请先添加数组的长度。

有一段时间你的建议导致令人厌烦的行为:

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