编辑:将'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 ”没有问题
关于我犯错的地方或我可以改变的地方的任何想法?
如果最好看到完整档案,请告诉我。
答案 0 :(得分:1)
您在此处有两个列表:hi
和list
,其中hi
可能是您尝试转换为Pig Latin的字符串。
请注意,您的循环索引的长度为hi
:for h in range(len(hi))
,但在您的代码中,您使用h
来索引list
,例如: if list[h] in string.whitespace
。从错误中看,您的输入字符串hi
似乎比list
长,因此当遇到h
的值大于list
的长度时,它抛出了这个错误。
我认为您打算在整个代码中引用hi
(但我可能错了,您的问题并不清楚),所以只需将list
的所有实例替换为{{1} }}
已更新,以反映更新后的问题:
在您的代码hi
中删除列表中的元素,这会减少列表的大小。因此,如果最初在list.pop(h)
时长度为20个元素,则循环仍会运行直到index = 19,但是list会越来越短,所以在某些时候,不再有20个元素。
这些情况下的常见策略是向后遍历列表。看一下答案here。