Python 使用索引和步长反转切片背后的逻辑
Logic behind Python reversing a slice with index and step
我正在尝试理解使用切片索引和步长反转切片背后的逻辑。
首先,我可以像这样使用切片步骤反转字符串:
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),起始索引应该大于结束索引,否则你会得到一个空字符串。
语法是
a[begin;end;step]
所以当你使用 step -1
时,它会向后遍历字符串,因此 begin 应该比 end 大。
如果您省略步骤,它默认为 1
并且将向前遍历字符串并且应该开始必须小于结尾。
有趣的是,你还可以按-2
步遍历
a = 'Hello, world!'
a[::-2] # => '!lo olH'
我正在尝试理解使用切片索引和步长反转切片背后的逻辑。
首先,我可以像这样使用切片步骤反转字符串:
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),起始索引应该大于结束索引,否则你会得到一个空字符串。
语法是
a[begin;end;step]
所以当你使用 step -1
时,它会向后遍历字符串,因此 begin 应该比 end 大。
如果您省略步骤,它默认为 1
并且将向前遍历字符串并且应该开始必须小于结尾。
有趣的是,你还可以按-2
a = 'Hello, world!'
a[::-2] # => '!lo olH'