结束索引为0的切片运算符

时间:2018-08-21 05:55:45

标签: python python-3.x slice

a='0123456789'

>>> a
'0123456789' 

>>> a[1:-6:1] # working as expected
'123'

>>> a[2:-1:-1] # i was expecting '210' as answer based on start index=2 end index=0
''

请帮助理解第二个分片运算符如何不返回任何内容

5 个答案:

答案 0 :(得分:7)

startstop的负索引始终通过从len(sequence)中隐式减去来转换。因此,a[2:-1:-1]转换为a[2:len(a)-1:-1]a[2:9:-1],其英语读音为“从索引2开始,向后退1,直到等于或低于索引9”。

由于您从索引2开始,因此您已经等于或低于9,并且分片立即结束。

如果要从索引切到字符串的开头,请省略结尾索引(对于负片,则意味着继续到“开始字符串”):

a[2::-1]

或将其显式提供为None,这就是省略stop隐式使用的结果:

a[2:None:-1]

答案 1 :(得分:4)

我认为,您想做这样的事情:

a[2::-1]  # produces: [2, 1, 0]

使用步骤2-1切成-1(您所做的)确实会产生一个空列表,因为您想以负步长前进,因此会收到一个空列表

This SO post提供了解释:

  

这真的很简单:

a[start:end] # items start through end-1
a[start:]    # items start through the rest of the array
a[:end]      # items from the beginning through end-1
a[:]         # a copy of the whole array
     

还有步长值,可以与上述任何一个一起使用:

a[start:end:step] # start through not past end, by step
     

要记住的关键点是:end值代表第一个   不在所选切片中的值。所以,两端之间的区别   开始是所选元素的数量(如果步骤为1,则   默认)。

     

另一个功能是开始或结束可能是负数,   表示它从数组的末尾而不是开头开始计数。   所以:

a[-1]    # last item in the array
a[-2:]   # last two items in the array
a[:-2]   # everything except the last two items
     

类似地,step可能是负数:

a[::-1]    # all items in the array, reversed
a[1::-1]   # the first two items, reversed
a[:-3:-1]  # the last two items, reversed
a[-3::-1]  # everything except the last two items, reversed
     

如果项目少于您所要求的,Python对程序员很友好   对于。例如,如果您要求a [:-2]并且a仅包含一个   元素,您将获得一个空列表而不是一个错误。有时候你   会更喜欢该错误,因此您必须意识到可能会发生这种情况。

答案 2 :(得分:0)

您可以这样做:

a=[0,1,2,3,4,5,6,7,8,9]
print(a[2::-1])

因为当您在切片操作中执行-1时(如您的代码中一样),python会将其假定为结束索引位置。

要证明这一点:

>>> a[-1]
9

您的代码格式:

a[start:end:step]
您的情况下的

start应该为2(包括),而end应该为空白(不包括)。将step指定为-1时,将以相反的顺序进行切片。

答案 3 :(得分:0)

切片索引如下图所示。切片s[start:end]是从start开始并延伸到但不包括end的元素。因此,使用-1意味着不包括最后一个索引。因此,这按设计工作。如果需要最后一个索引,可以选择将其留空。

Slice Index

所以

  • s[1:]返回ello
  • s[1:-1]返回ell

请参见Google Python Class - Strings,它启发了这个答案,也是我从这张照片中抓到的地方。

答案 4 :(得分:0)

负索引总是 解释为从头开始的索引。另一方面,None总是被解释为“直到适当的目的”:

>>> a[2::-1]
'210'

缺少索引等于切片中的None

>>> a[2:None:-1]
'210'

要了解我的意思,请尝试

>>> a[:2:-1]
'9876543'