首页 > 解决方案 > 我正在制作一个函数和一个循环并获取列表索引超出范围错误

问题描述

我正在尝试创建一个函数来删除与其旁边的项目相同的任何项目。我有下面的代码,我得到一个列表索引超出范围错误。如果您能提供帮助,那就太棒了,谢谢。

def unique_in_order(iterable):
    chars = list(iterable)
    for i in range(len(chars)):
        if i > 0:
            if chars[i] == chars[i-1]:
                chars.remove(chars[i])
    return chars

标签: pythonloopsindexing

解决方案


如果您颠倒for循环的顺序,从倒数第二个项目开始,当您从正在处理的列表中删除项目时,您不会弄乱循环的范围。

因此,在您的情况下,从开始len(chars)-2并转到-1(包括 0)并-1像这样进行步骤:并在需要时for i in range(len(chars)-2,-1,-1)删除该项目。i+1

此外,该[remove(x)][1]方法将从列表中删除其值等于 的第一项x,因此在这种情况下pop([i])应使用以确保删除目标重复项。

def unique_in_order(iterable):
    chars = list(iterable)
    for i in range(len(chars)-2,-1,-1):
        if chars[i] == chars[i+1]:
            #print('removing ' + chars[i+1])
            chars.pop(i+1)
        print(chars)
    return chars

out = unique_in_order('AAAABBBCCDAABBBX')
print(out)

返回: ['A', 'B', 'C', 'D', 'A', 'B', 'X']


推荐阅读