2016-12-29 52 views
0

我想了解使用切片索引和步骤颠倒切片背后的逻辑。Python后面的逻辑颠倒索引和步骤

首先,我可以用切片的步骤是这样反向的字符串:

a = "Hello" 
a[::-1] 
>>> 'olleH' 

另外,我可以扭转只喜欢这个字符串的一部分:

a = "Hello" 
a[:2:-1] 
>>> 'ol' 

但是,当我尝试使用另一个范围来反转字符串,如下所示:

a = "Hello" 
a[1:3:-1] 
>>> '' 

我得到一个空字符串。

但是,如果我逆范围这样的例子:

a = "Hello" 
a[4:1:-1] 
>>> 'oll' 

我得到索引1和4

但之间的逆转片,纠正我,如果我错了,我知道,一个切片的第一个索引必须小于第二个索引。

这就是为什么当我运行这个例子:

a = "Hello" 
a[4:1] 
>>> '' 

我得到一个空字符串。

那么,有人可以向我解释为什么当一个带有负步的倒置范围工作时颠倒一个字符串(切片),并且使用第一个索引的逻辑小于切片中的第二个索引的逻辑会给出一个空字符串。

感谢您的回答。

+0

感谢您的评论步骤。我试图在发布我的答案之前进行搜索。我没有找到这个链接。 –

回答

3

不是第一个数字小于第二个数字,它只是起始索引,而第二个数字是结束索引。因此,当你向后(第三个索引是-1)时,起始索引应该大于结束索引,否则你会得到一个空字符串。

2

语法

a[begin;end;step] 

因此,当您使用分步-1将通过串向后遍历,从而开始应该比年底大。

如果您省略步骤,则默认为1,并且将向前遍历字符串,并且应该开始必须小于结束。

有趣的是,你还可以遍历的-2

a = 'Hello, world!' 
a[::-2] # => '!lo olH'