为什么python切片语法不会从负索引转为正索引?

问题描述 投票:6回答:3

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

有没有一个很好的理由说明切片语法没有从负指数到正指数(反之亦然)?

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

python slice
3个回答
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]),但是当前更有用的行为很难用环绕模拟。


2
投票

Guido van Rossum,Python语言的最初发明者,在这里有一篇关于切片语法的博文:

http://python-history.blogspot.fi/2013/10/why-python-uses-0-based-indexing.html

我不相信有任何特殊原因导致它不起作用。也许这个想法在撰写初始语法时并没有超越Guido的想法,也许是因为清晰。在任何情况下,为Python语法添加这些新功能为时已晚,因为它可能会破坏许多现有软件。


0
投票

首先你需要知道python中的切片是从左到右所以当你尝试[3,1][-1:1]结果是空的!您可以假设列表中的每个条目都有2个索引,如下所示:例如,如果我们有一个包含4个条目的列表,则这是索引号:

[0,1,2,3,4]

要么

[-5,-4,-3,-1] 

为了完全理解切片读取,请看这里:http://structure.usc.edu/numarray/node26.html

© www.soinside.com 2019 - 2024. All rights reserved.