【问题标题】:IndexError even though the index variable should be in rangeIndexError 即使索引变量应该在范围内
【发布时间】:2023-03-11 04:13:01
【问题描述】:

编辑:将“hi”更新为“list”

我是一名初学者,我一直致力于将英语句子翻译成猪拉丁语的项目,但在尝试删除句子中标点符号前的空格时遇到了问题。这是我遇到问题的脚本。

import string

list = ['H', 'i', 's', 't', 'a', 'y', ' ', 's', 'i', 'a', 'y', ' ', 'a', 'a', 'y', ' ', 'e', 's', 't', 't', 'a', 'y', ' ', '.', ' ', 'H', 'i', 's', 't', 'a', 'y', ' ', 's', 'i', 'a', 'y', ' ', 'a', 'a', 'y', ' ', 'e', 's', 't', 't', 'a', 'y']

h = 0

for h in range(len(list)):
    if list[h] in string.whitespace:
        if list[h + 1] in string.punctuation:
            list.pop(h)
            h = h + 1
        else:
            h = h + 1
    else:
        h = h + 1

print(list)

当我运行它时,我得到了错误:

  File " ... ", line 110, in <module>
    if list[h] in string.whitespace:
IndexError: list index out of range

当我在循环外打印 Hi[h] 时,索引 'h'

没有问题

关于我在哪里犯了错误或我可以改变什么的任何想法?

如果看到完整的文件更好,请告诉我。

【问题讨论】:

    标签: python variables index-error


    【解决方案1】:

    这里有两个列表:hilist,其中hi 可能是您尝试转换为 Pig Latin 的字符串。

    请注意,您的循环索引的长度为hi:for h in range(len(hi)),但在您的代码中,您使用h 来索引list,例如:if list[h] in string.whitespace。从错误中,您的输入字符串hi 似乎比list 长,因此当它遇到大于list 长度的h 值时,它会抛出此错误。

    我认为您打算在整个代码中引用hi(但我可能错了,您的问题并不清楚),所以只需将所有list 实例替换为hi

    更新以反映更新后的问题:

    在您的代码中,list.pop(h) 从列表中删除元素,从而减小列表的大小。因此,如果在for h in range(len(list)) 时它最初是 20 个元素,那么循环仍然会运行到 index = 19,但列表会越来越短,所以在某些时候,不再有 20 个元素了。

    在这些情况下,常见的策略是向后遍历列表。看看答案here

    【讨论】:

    • 好的,谢谢。在我的原始文件中,'hi' 是我正在使用的列表的名称,但我将其更改为 list 作为示例。我会更新我的描述。但是,我仍然遇到同样的错误。我找不到 h 的值大于列表“列表”长度的原因。
    • 因为您还从列表中弹出元素,这会减小list 的大小。因此,如果它最初是 20 个元素长,则循环仍会运行到 index = 19,但 list 会越来越短,所以在某些时候,不再有 20 个元素。
    猜你喜欢
    • 2019-09-24
    • 2020-08-18
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2019-11-25
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多