0

编辑:将“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 ”没有问题

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

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

4

1 回答 1

1

您在这里有两个列表:hilisthi大概是您尝试转换为 Pig Latin 的字符串。

请注意,您的循环索引正在经历hi:的长度for h in range(len(hi)),但在您的代码中,您使用的是hto index list,例如:if list[h] in string.whitespace。从错误中,您的输入字符串似乎hi比 长list,所以当它遇到一个大于 的值时hlist它会抛出这个错误。

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

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

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

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

于 2017-11-20T02:12:47.507 回答