【问题标题】:understanding negative slice step value [duplicate]了解负切片步长值[重复]
【发布时间】:2013-09-27 06:58:32
【问题描述】:

当我在切片的情况下设置负值时,我无法理解会发生什么。

我知道[::-1] 反转一个字符串。我想知道它分配什么值来启动和停止以获得反向。

我认为结束字符串会是 0。并尝试过

f="foobar"

f[0:5:-1]---> 它没有给我任何输出。为什么?

我已经读过 start 不应该通过 stop。在负步长值的情况下也是如此吗?

谁能帮我解开疑惑。

【问题讨论】:

  • 因为负步幅从起始值开始; 0 - 1 为 -1 且超出 0 - 5 的范围。以 [5::-1] 开头。
  • @Martijn 这个答案并没有解释多少关于负步长值的情况。

标签: python slice


【解决方案1】:

f[0:5:-1] 不产生任何输出的原因是因为你从 0 开始,并试图倒数到 5。这是不可能的,所以 Python 返回一个空字符串。

相反,您需要f[5:0:-1],它返回字符串"raboo"

请注意,该字符串不包含f 字符。为此,您需要f[5::-1],它返回字符串"raboof"


你还问过:

我读过 start 不应该通过 stop。在负步长值的情况下也是如此吗?

不,这不是真的。通常,start 值不应传递stop 值,但前提是步长为正。如果步长为负,则反之亦然。 start 必须高于 stop 值。

【讨论】:

  • 在 f[5::-1] 的情况下,它分配给停止的值是多少。是 -1
  • 由于 stop 的值缺失,它被赋值为None。因此,当你做f[:]时,这实际上是做f[None:None]的捷径。诚然,乍一看这有点令人困惑,但确实有点道理。如果停止值为-1,则表示您要切片但不包括最后一个字符。您需要一些值来指示“切片到末尾”,并且在这种情况下没有任何数字真正有意义。
  • 哦,我以为 f[:] 表示 f[0:end-of-string]。非常感谢您解决了我的疑问
  • @Shubendra -- 从技术上讲,这是正确的。执行f[:]f[0:]f[0:None]f[None:None] 将返回完全相同的内容。然而,由于 Python 中没有 end-of-string 值,他们决定使用 None。为了保持一致,Python 开发人员决定让 None 与 0 一起为 start 值工作。
【解决方案2】:

你可以这样想:

f[0:5]0 是开始位置,5-1 是结束位置。

f[0:5:-1]5 是开始位置,0+1 是结束位置。

在切片中,起始位置必须低于结束位置。 如果不是这种情况,则结果为空字符串。因此f[0:5:-1] 返回一个空字符串。

【讨论】:

  • 不!你总是从第一个操作数到冒号左边:,即[start:stop:step],所以在你的情况下f[0:5:-1] 5 不是开始位置.. . f[0:5:-1] 中的第一项将是第一个 index (0) - (step),即 0 - 1 = -1 ,第二项将是 index (0) - (step + 1),即0 - 2 = -2,以此类推……它倒退……阅读顶部的已回答问题这个问题,那里有链接。
猜你喜欢
  • 2017-06-06
  • 2020-12-25
  • 1970-01-01
相关资源
最近更新 更多