简单的Python字符串(向后)切片

2024-09-29 19:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

是的,我知道上面有很多类似的问题。但我就是找不到我要找的东西。在

我的困惑是关于向后切片。在

my_jumble = ['jumbly', 'wumbly', 'number', 5]
print(my_jumble[:1:-1])

现在我发现结果会是

^{pr2}$

所以我想也许我可以通过改变弦切片的末端来测试它。在

print(my_jumble[:2:-1])

我很确定Python会给我

[5, 'number', 'wumbly']

相反,它给了我这个让我完全迷失。。。在

[5]

有人能解释一下这是怎么回事吗?我是Python新手,我觉得这很令人困惑。。谢谢你的帮助。在


Tags: numbermy切片print新手pr2jumblewumbly
3条回答

我认为理解代码中的内容最简单的方法之一是理解向后切片与索引列表的方式相反(在视觉上是,就像颠倒列表一样)在切片之前,但是列表中元素的索引本身并不改变。在

因此,当你有这样的列表时:

['jumbly', 'wumbly', 'number', 5]
    0        1         2       3   #<-- index

通过使其反向读取(添加-1作为第三个索引器),可以使它看起来像这样(因为它现在是从最后一个索引到第一个索引,而不是从第一个索引到最后一个索引):

^{pr2}$

然后当你从“开始”切到一个(:1),你会从“开始”得到一切(现在“开始”是3),当看到1时停止:

[5, 'number', 'wumbly', 'jumbly']
 3      2         1       0       #<-- index
 ^      ^         x
 grab! grab!      nope!

所以你得到了回报:

[5, 'number']

使用[:2:-1]向后切片时,同样的原则也适用:

[5, 'number', 'wumbly', 'jumbly']
 3      2         1       0       #<-- index
 ^      x
 grab!  nope!

所以你得到了你的结果:

[5]

现在,使用这个原则,你知道如果你想返回你想要的结果,你应该把什么作为第二个索引器:0!-->;[:0:-1]

[5, 'number', 'wumbly', 'jumbly']
 3      2         1       0       #<-- index
 ^      ^         ^       x
 grab!  grab!     grab!   nope!

然后,您将得到您想要的结果:

[5, 'number', 'wumbly']

array[start:end:step]表示从索引start开始,然后在每个循环循环中添加step,如果索引大于或等于end,则中断循环。如果省略start,则等于0。如果省略end,则将其设置为len(array)。如果startend为负值,则将其设置为len(array) + start或{}。如果step为负,它将被添加到每个循环周期的当前索引中,但继续循环的条件是current_index > end,而不是{}为正时{}。在

因此['jumbly', 'wumbly', 'number', 5][:1:-1]意味着开始从索引len(array)到索引1(不包括)--所以我们得到了['number', 5]的项目:

>>> ['jumbly', 'wumbly', 'number', 5][:1:-1]
>>> [5, 'number']

['jumbly', 'wumbly', 'number', 5][:2:-1]表示开始从索引len(array)到索引2(值'number'存储在索引2的列表中)(不包括)--所以我们有[5]

^{pr2}$

或者用一个字符为索引的字符串更好地解释:

>>> '0123'[:1:-1]
>>> '32'

>>> '0123'[:2:-1]
>>> '3'

您使用的语法是list[start:stop:step]

如果不为start甚至不为零输入值,那么python将决定一个合适的开始。对于正步骤,它将是0,对于负步骤,它是最后一个元素。在

所以在第一个例子中,您实际上是说选择从0开始的所有项目,直到1,但顺序相反。所以打印出来了[5,'number']

在第二个例子中,你所说的是从第一个到第三个,按相反的顺序选择所有的项目。按照相反的顺序,你从5开始,列表中的第三项是'number',但由于你只说了到第三项,它就到此为止了。在

由于您为stop指定了一个正值,它将是从左到右的方向,因此在您的例子中,第三个元素的顺序是正确的。在

还要注意,在python中list[start: stop]相当于[start: stop),第一个元素被认为是不包括右边界的。在

相关问题 更多 >

    热门问题