Python 2.7 为什么Python中的负切片不起作用?

Python 2.7 为什么Python中的负切片不起作用?,python-2.7,Python 2.7,我是Python新手,已经阅读了一些关于切片的教程,但是我在空闲状态下运行的示例似乎并没有返回我所期望的结果。例如,我已将以下列表分配给变量a a=[0,1,2,3,4,5,6,7,8,9] 现在我理解切片是[我想包括的编号:编号最多,不想包括:步骤] 因此,如果我做a[1],我希望1。如果我做了a[1:3],它将是1,2 现在如果我做a[-1],我得到9,但是如果我做a[-1:-5],我什么也得不到。我看到的只是[]。为什么呢?我希望看到9,8,7,6 我正在Windows 7 Profess

我是Python新手,已经阅读了一些关于切片的教程,但是我在空闲状态下运行的示例似乎并没有返回我所期望的结果。例如,我已将以下列表分配给变量
a

a=[0,1,2,3,4,5,6,7,8,9]

现在我理解切片是
[我想包括的编号:编号最多,不想包括:步骤]

因此,如果我做
a[1]
,我希望
1
。如果我做了
a[1:3]
,它将是
1,2

现在如果我做
a[-1]
,我得到
9
,但是如果我做
a[-1:-5]
,我什么也得不到。我看到的只是
[]
。为什么呢?我希望看到
9,8,7,6


我正在Windows 7 Professional上运行Python 2.7。在本例中,您需要添加
步骤
参数以获得所需的:

In [1]: a=[0,1,2,3,4,5,6,7,8,9]

In [2]: a[-1:-5:-1]
Out[2]: [9, 8, 7, 6]
如果您想节省更多的空间,可以省略第一个参数:

In [3]: a[:-5:-1]
Out[3]: [9, 8, 7, 6]
Python处理“负”切片的方式是将对象的
len
添加到负数。因此,当你在
a[-1:-5]
中说时,它基本上是说
a[-1+10:-5+10]
,它等于
a[9:5]
,因为
start
/
end
指的是这两个字符之间的所有字符(在列表中向前移动),所以它不会返回任何东西(因此你的空白列表)。您可以通过以下操作看到这一点:

In [5]: a[-5:9]
Out[5]: [5, 6, 7, 8]

In [6]: a[5:9]
Out[6]: [5, 6, 7, 8]
由于
-5+10=5
,负指数和正指数的结果相同


提供-1
step
参数告诉它从第一个元素开始,但从开始位置向后移动。

我认为最好不要将拼接看作数字本身,而是指向索引的指针

                      +---+---+---+---+---+---+---+---+---+---+
                      | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
                      +---+---+---+---+---+---+---+---+---+---+
                        0   1   2   3   4   5   6   7   8   9
                      -10  -9  -8  -7  -6  -5  -4  -3  -2  -1
因此,在切片
a[-1:-5]
时,从索引9开始向下到索引5。那一片什么都没有。如果您执行
a[-5:-1]
,那么您将从索引5开始到索引9


RocketDonkey是对的-如果你想
[9,8,7,6]
,你需要后退。

为什么我需要添加
步骤
参数?我原以为它会自动知道
-1
-5
的开始和结束位置end@PeanutsMonkey是的,一开始有点奇怪。添加了一个更新-这有意义吗?现在有意义了。因此,当使用负范围时,它是否会将字符总数增加1?例如,在我的示例中,我有9个字符,如果Python正在执行
a[-1+10]:[-5+10]
,我会想象它将字符总数增加1。@PeanutsMonkey我相信您实际上有10个字符(0-9):)而且,正如您可能知道的,上限不包括在切片中,因此
a[1:2]
将返回
[1]
,如果这有帮助的话。如果我从1开始
len
计数,这是正确的。我从0开始数。