【问题标题】:Python string range does not produce the last character [duplicate]Python字符串范围不产生最后一个字符[重复]
【发布时间】:2019-12-16 05:56:38
【问题描述】:

单词Hello包含5个字符。

>>> x = 'Hello'
>>>
>>> len(x)
5
>>>

x[5]会报错,因为Python编号是从0开始的,这个我可以理解。

>>> x[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> 

>>> x[0]
'H'
>>> 

最后一个字符是x[4]

>>> x[4]
'o'
>>> 

但是,当我尝试从x[0:4] 开始的范围时,最后一个字母不存在。

>>> x[0:4]
'Hell'
>>> 

我可以知道为什么吗?

【问题讨论】:

  • 范围的上限被排除

标签: python


【解决方案1】:

从 0 到 4 切片将产生项目 0、1、2 和 3。如果您想包括最后一个使用

x[0:5]

【讨论】:

    【解决方案2】:
    x[0:4]
    

    表示

    索引4 被排除在外。

    这背后是有原因的。您可以只减去这两个数字来计算结果的长度。 :)

    【讨论】:

    • 理由是你可以做到x对应x[0:len(x)]而不是len(x)-1
    【解决方案3】:

    在切片中,包含第一个 int 而排除最后一个 int

    【讨论】:

      【解决方案4】:

      我相信原因是大多数操作的执行方式:

      for(x=start;x<end;x++){
         output[x]=input[x]
      }
      

      (请原谅我的 C)。

      另一个原因是切片运算符和len 之间的一致性。相信a[0:len(a)] 应该返回a。

      【讨论】:

      • 谢谢@George。是否可以在 Python 中查看这种切片技术的实际源代码?如果是,请告诉我实际代码的方式或位置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      相关资源
      最近更新 更多