【问题标题】:Python String index out of range, difference between s[0] and s[:1] [duplicate]Python字符串索引超出范围,s [0]和s [:1]之间的区别[重复]
【发布时间】:2019-08-10 08:52:58
【问题描述】:

您好我是Python新手,正在尝试实现去除两端空格的功能。

trim_1() 完美运行,但使用trim_2() 时出现此错误:

IndexError: string index out of range 

所以s[:1]s[0] 不是一回事吗?为什么s[:1] 有效而s[0] 无效? 任何人都可以对此有所了解吗?

def trim_1(s) :
    while s[:1]  == ' ':
        s= s[1:]
    while s[-1:] == ' ':
        s= s[:-1]
    return s


def trim_2(s) :
    while s[0] == ' ':
        s= s[1:]
    while s[-1] == ' ':
        s= s[:-1]
    return s

【问题讨论】:

  • 不,它们不是一回事,s[0] 是第一个字符,s[:-1] 是整个字符串。另一方面,s[0] == s[-len(s)]s[-1] == s[len(s)-1]。您可以使用s.strip() 来完成您想要实现的目标。

标签: python python-3.x string slice


【解决方案1】:

如果您要求特定索引,那么您就是在告诉计算机您的代码需要该值才能继续。因此,指定索引处必须有一个元素,否则您将看到错误。使用这种方法时,通常的做法是先检查,例如:

value = None
if len(s) > 0:
    value = s[0]  # if index 0 doesn't exist, and error will be thrown

如果您要求像这样的开放式“切片”,那么您就是在告诉计算机您想要指定范围内的 所有 元素。程序员需要处理可能的结果:不存在元素、存在 1 个元素、存在多个元素。

values = s[:0]  # returns variable number of elements
if len(values) == 0:
    ...
elif len(values) > 0:
    ...

这两种方法都有其用途。请记住,您是程序员在控制之中。这些都是您可以用来解决问题的工具。每个选项都有不同的边缘情况,您必须处理。请记住,每个场景都有一两个适当的数据结构。如果您使用了不合适的方法,例如将对象属性放入数组而不是使用类,您会发现您的代码看起来既麻烦又丑陋。只是要记住的事情。当你变得更有经验时,这样的东西才有意义。希望对您有所帮助!

【讨论】:

  • "记住你是程序员在控制" 非常好的建议!!!!!!谢谢
【解决方案2】:

你试过了吗-

sentence = ' hello  apple '
sentence.strip()

【讨论】:

  • 感谢 Regressor 带来这个内置功能。
【解决方案3】:

这是因为 Python 可以容忍切片的越界索引,而不能容忍列表/字符串本身的越界索引,如下所示:

>>> ''[:1] # works even though the string does not have an index 0
''
>>> ''[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2017-03-26
    • 2016-02-19
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多