Python背后的逻辑用索引和步骤反转切片

时间:2016-12-29 02:34:47

标签: python slice reverse

我试图理解使用切片索引和步骤反转切片背后的逻辑。

首先,我可以使用像这样的切片步骤来反转字符串:

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]
>>> ''

我得到一个空字符串。

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

感谢您的回答。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

语法是

a[begin;end;step]

因此,当您使用步骤-1时,它将向后遍历字符串,因此开始应该大于结束。

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

有趣的是,您也可以按-2

的步长进行遍历
a = 'Hello, world!'
a[::-2] # => '!lo olH'