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

Python使用索引和步骤反转切片背后的逻辑,python,slice,reverse,Python,Slice,Reverse,我试图理解使用切片索引和步骤反转切片背后的逻辑 首先,我可以使用切片步骤反转字符串,如下所示: a = "Hello" a[::-1] >>> 'olleH' a = "Hello" a[:2:-1] >>> 'ol' a = "Hello" a[1:3:-1] >>> '' 此外,我只能反转字符串的一部分,如下所示: a = "Hello" a[::-1] >>> 'olleH' a = "Hello" a[:2:

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

首先,我可以使用切片步骤反转字符串,如下所示:

a = "Hello"
a[::-1]
>>> 'olleH'
a = "Hello"
a[:2:-1]
>>> 'ol'
a = "Hello"
a[1:3:-1]
>>> ''
此外,我只能反转字符串的一部分,如下所示:

a = "Hello"
a[::-1]
>>> 'olleH'
a = "Hello"
a[:2:-1]
>>> 'ol'
a = "Hello"
a[1:3:-1]
>>> ''
但当我尝试使用另一个范围反转字符串时,如下所示:

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]
>>> ''
我得到一个空字符串

那么,有人能给我解释一下为什么反转一个字符串(切片)而反转一个负步长的范围是有效的,并且使用切片中第一个索引小于第二个索引的逻辑将得到一个空字符串


谢谢你的回答。

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

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

语法是

a[begin;end;step]
因此,当您使用step
-1
时,它将向后遍历字符串,因此begin应该大于end

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

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

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

a[begin;end;step]
因此,当您使用step
-1
时,它将向后遍历字符串,因此begin应该大于end

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

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

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

谢谢你的评论。在发布我的答案之前,我试图搜索。我没有找到这个链接。谢谢你的评论。在发布我的答案之前,我试图搜索。我没有找到这个链接。