【问题标题】:Slice From Length to Beginning Index从长度到起始索引切片
【发布时间】:2020-10-25 23:33:39
【问题描述】:

在对字符串进行切片时,我知道符号是 [start:stop:counter]。如果是这样的话,如果我有string = "hello",为什么string[5:0:-1] 返回olle而不是ollehstring[::-1] 为我返回 olleh,这很好,但我对为什么第一个语法不起作用感到困惑

【问题讨论】:

  • string[5:0:-1] - 此处不考虑以0 结尾的。应该是[start:upto stop:counter]
  • 好的,那么string[5:0:-6]是唯一的选择吗?
  • 不,string[5::-1]
  • ''.join(reversed('Hello')) == 'olleH'。添加了 reversed 是因为许多人的反向切片错误。这些都与 IDLE 无关。

标签: python string slice


【解决方案1】:

如果我们查看依次创建的每个术语:

string[5] doesn't exist, so adds nothing
string[4] is "o"
string[3] is "l"
string[2] is "l"
string[1] is "e"

string[0] 不被调用,因为 Python 范围不做最后一个元素。

【讨论】:

    【解决方案2】:

    请记住,字符串的切片是:到(但不包括):counter。因此,当您将-1 作为计数器传递时,这实际上是说从最后一个字符到第一个字符,但不包括它。因此:olle

    看到如果你去掉 0,你也会得到完整的字符串:

    string[5::-1]
    

    返回:

    olleh
    

    【讨论】:

      【解决方案3】:

      这里string[5:0:-1],不包括结束索引0,即char h。为了包含 first char 以及string[5::-1]

      a[start:stop]  # items start through stop-1
      a[start:]      # items start through the rest of the array
      a[:stop]       # items from the beginning through stop-1
      a[:]           # a copy of the whole array
      

      【讨论】:

      • 好的,那么string[5:0:-6]是唯一的选择吗?
      • 请看我的回答。另一种方法是完全避免使用0 并使用string[5::-1]
      • @J4102 替代品是 string[5::-1]
      • 哦,哎呀。我的意思是说字符串[5:-6:-1]。谢谢。
      【解决方案4】:

      如您所见,索引5 超出范围:

      string = "hello"
      #         01234
      print(string[5:0:-1])
      

      不过没关系,python会通过忽略它来处理它。

      喜欢:

      print(string[100:0:-1])
      

      输出:

      olle
      

      你知道在像string[0, 3]这样的切片中,它会返回'hel'(不包括索引3),所以反向切片也是如此,不包括停止索引。

      您的停止索引是0,即'h',因此,输出不包括'h'


      如果你想要反转字符串,你可以:

      print(string[::-1])
      

      输出:

      olleh
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-02
        • 2016-08-09
        • 2018-02-28
        • 2017-03-17
        • 2021-12-31
        • 2018-07-29
        • 2011-10-28
        • 2019-06-30
        相关资源
        最近更新 更多