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

2Xc*_*ion 5 python slice python-3.x

是的,我知道那里有很多类似的问题.但我找不到我想要的东西.

我的困惑是关于向后切片.

my_jumble = ['jumbly', 'wumbly', 'number', 5]
print(my_jumble[:1:-1])
Run Code Online (Sandbox Code Playgroud)

现在我发现结果会是

[5, 'number']
Run Code Online (Sandbox Code Playgroud)

所以我想也许我会通过改变字符串切片的结束来测试它.

print(my_jumble[:2:-1])
Run Code Online (Sandbox Code Playgroud)

我确信Python会给我一些类似的东西

[5, 'number', 'wumbly']
Run Code Online (Sandbox Code Playgroud)

相反它给了我这让我完全失去了......

[5]
Run Code Online (Sandbox Code Playgroud)

有人能解释一下这里发生了什么吗?我是Python新手,发现这很令人困惑..感谢您的帮助.

Ian*_*Ian 7

我认为理解代码内容的最简单方法之一是通过理解向后切片反转您对列表进行索引的方式(在视觉上,它就像是反转列表),然后再切片,但是列表中元素的索引自己改变.

因此,如果您有这样的列表:

['jumbly', 'wumbly', 'number', 5]
    0        1         2       3   #<-- index
Run Code Online (Sandbox Code Playgroud)

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

[5, 'number', 'wumbly', 'jumbly']
 3      2         1       0       #<-- index
Run Code Online (Sandbox Code Playgroud)

然后当你从"开始"切换到一个(:1)时,你从"开始"(现在是"开始" 3)得到所有东西,并在看到时停止1:

[5, 'number', 'wumbly', 'jumbly']
 3      2         1       0       #<-- index
 ^      ^         x
 grab! grab!      nope!
Run Code Online (Sandbox Code Playgroud)

这样你得到了回报:

[5, 'number']
Run Code Online (Sandbox Code Playgroud)

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

[5, 'number', 'wumbly', 'jumbly']
 3      2         1       0       #<-- index
 ^      x
 grab!  nope!
Run Code Online (Sandbox Code Playgroud)

因此你得到了你的结果:

[5]
Run Code Online (Sandbox Code Playgroud)

现在,使用这个原则,如果你想要返回你想要的东西,你就知道要放什么作为第二个索引器:零!- > [:0:-1]:

[5, 'number', 'wumbly', 'jumbly']
 3      2         1       0       #<-- index
 ^      ^         ^       x
 grab!  grab!     grab!   nope!
Run Code Online (Sandbox Code Playgroud)

然后,您将获得所需的结果:

[5, 'number', 'wumbly']
Run Code Online (Sandbox Code Playgroud)

  • 惊人的解释.我现在明白了.非常感谢. (2认同)