循环中无法删除列表中的元素

时间:2019-07-11 18:32:18

标签: python python-3.x index-error

IndexError:列表索引超出范围

我正在寻找列表中加倍的字符串,如果有重复,希望将其删除。因此,我使用if语句检查列表中的元素是否等于下一个元素,然后删除if ture。但是出乎意料的是,当我使用del list [i]代码返回错误时。

for i in range(len(formatted_text)-1):
  if(formatted_text[i] == formatted_text[i+1]):
    # formatted_text[i+1] = ''
    print(len(formatted_text)) # it is equal to 11
    print(i)                   # the repetition is at 4 and 5 element 
    del formatted_text[i]      # removal instruction

我希望它可以正常执行,不知道问题出在哪里。当我无循环检查时,它可以正常工作。

编辑: 我设法解决了这个问题。不幸的是(len(formatted_text)-2,0,-1)如果重复出现在列表的开头,则不起作用。这是可以正常工作并且友好的代码:

for i in range(len(formatted_text)-1):
 if(formatted_text[i] == formatted_text[i+1]):
   formatted_text[i+1] = ''
formatted_text.remove('')

2 个答案:

答案 0 :(得分:0)

一旦删除formatted_text的元素,开始时的元素就没有那么多了,但是循环将继续进行。

答案 1 :(得分:0)

您的循环已设置为可以运行这么多次迭代:

 range(len(formatted_text)-1)

如果您从列表中删除项目,则此范围将大于您要检查的项目数,因此会看到超出范围的错误。