Python Can';t在循环中删除列表中的元素
索引器:列表索引超出范围 我正在寻找一个列表中的双字符串,并希望删除,如果有一个重复。所以我使用if语句检查列表中的一个元素是否等于下一个元素,然后删除if true。但出乎意料的是,当我使用del list[I]时,代码返回错误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
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将是最后一个元素的索引;你想要在那之前的那个。