【问题标题】:Indexing and Slicing in Python [duplicate]Python中的索引和切片[重复]
【发布时间】:2019-12-18 03:59:08
【问题描述】:

我刚开始学习编程,需要澄清一下。

对于

s = "abcdef"
print(s[0:2:-1])

输出是一个空字符串。我不太明白为什么print(s[:2:-1]) 的输出是fed,而print(s[0:2:-1]) 没有。

【问题讨论】:

标签: python


【解决方案1】:

print(s[:2:-1])print(s[0:2:-1]) 不同 - 它与 print(s[None:2:-1]) 相同。当您省略切片参数之一或使用None 时,将替换端点。如果步长为负,则起点是序列的结尾,终点是序列的起点。 print(s[0:2:-1])s[0]s[2],但它不能因为2 > 0 并且没有办法从0 倒数到2。print(s[:2:-1])s[-1]s[2],因为@987654332 @ 是字符串的最后一个字符。

【讨论】:

    【解决方案2】:

    如果将第三个参数设置为负数,则iterable的元素会倒序遍历。然后让第一个参数为空意味着迭代应该从最右边的元素开始。想想s[::-1] == 'fedcba'这个事实。

    【讨论】:

      【解决方案3】:

      我将解释索引中这三个数字的含义!

      s = "abcdef"
      

      在此字符串中,如果您从左侧数数,则索引以 0 开头,如果您从右侧数数,则以 -1 开头。这意味着,如果从左侧开始计数,a 的索引为 0f 的索引为 5,如果从右侧计数,f 的索引为 -1a 的索引为索引为-6

      因此

      >>> s[0:-1]
      'abcde'
      

      如果你想要索引恒定分隔,那么你可以在开始和结束之后再引入一个数字,如下所示。

      >>> s[0:5:2]
      'ace'
      

      这意味着,您正在从头到尾阅读每个 2nd 索引。此外,当你写

      >>> s[::-1]
      'fedcba'
      

      您指的是每个-1 th 索引,这基本上意味着,是的!你猜对了:),颠倒顺序!

      我认为这个答案以及这个线程中的其他答案应该给你一个好主意!

      问候

      【讨论】:

        【解决方案4】:

        字符串切片的语法很简单:

        x[start:end:step]
        

        切片从start 开始并在end 之前结束,以step 迭代。

        s[0:2:-1]
        

        返回[],因为您不能从索引 0 向后切片到 2。这没有道理! s[2:0:-1](返回'cb')会更有意义。

        s[:2:-1]
        

        返回'fed'。省略 start 和 -1 的 step 意味着从序列末尾到反向索引 2 的切片(因为 step 是 -1)。

        【讨论】:

          【解决方案5】:

          例如替换 0 和 2

          打印(s[2:0:-1])

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-24
            • 2021-05-10
            • 2021-02-11
            • 1970-01-01
            • 2012-12-16
            • 2013-11-30
            • 1970-01-01
            • 2016-10-27
            相关资源
            最近更新 更多