Python 2.7 为什么Python中的负切片不起作用?
我是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
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开始数。