Python Can';t在循环中删除列表中的元素

Python Can';t在循环中删除列表中的元素,python,python-3.x,index-error,Python,Python 3.x,Index Error,索引器:列表索引超出范围 我正在寻找一个列表中的双字符串,并希望删除,如果有一个重复。所以我使用if语句检查列表中的一个元素是否等于下一个元素,然后删除if true。但出乎意料的是,当我使用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(fo

索引器:列表索引超出范围

我正在寻找一个列表中的双字符串,并希望删除,如果有一个重复。所以我使用if语句检查列表中的一个元素是否等于下一个元素,然后删除if true。但出乎意料的是,当我使用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(格式化的_文本)-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('')

删除
格式化的\u text
元素后,元素的数量没有开始时的那么多,但循环将继续进行,就好像有一样。

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

 range(len(formatted_text)-1)

如果从列表中删除项目,则此范围将大于正在检查的项目数,因此会出现超出范围的错误

虽然这可能是某个问题的重复,但它不是所引用问题的重复(这是关于迭代元素,而不是索引)。如果您想继续使用字符串迭代方法,您可以尝试使用
range(len(array)-2,0,-1)
反向遍历列表。从第二个到最后一个索引(与最后一个相比)到第一个。这样,删除元素不会影响下一个索引。请尝试以下操作:
[x[1]用于枚举(my_list)中的x,如果my_list[x[0]!=my_list[x[0]-1]
范围(len(数组)-2,0,-1),是的,正在工作,谢谢。但是为什么是-2呢?@JanKwiatkowski:len(array)-1将是最后一个元素的索引;你想要在那之前的那个。