【问题标题】:Logic behind Python reversing a slice with index and step [duplicate]Python使用索引和步骤反转切片背后的逻辑[重复]
【发布时间】:2017-05-13 08:20:53
【问题描述】:

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

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

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

我得到一个空字符串。

那么,有人可以向我解释为什么反转一个字符串(切片),而一个负步长的反转范围有效,并且使用切片中第一个索引小于第二个索引的逻辑会给出一个空字符串。

感谢您的回答。

【问题讨论】:

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

标签: python slice reverse


【解决方案1】:

语法是

a[begin;end;step]

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

如果省略 step,则默认为 1,并将向前遍历字符串,并且 begin 必须小于 end。

有趣的是,你也可以以-2的步长遍历

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多