我做了一个函数和一个循环,得到了一个列表索引超出范围的错误

2024-03-29 13:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个函数,该函数可以删除与它旁边的项相同的任何项。 我有下面的代码,我得到一个列表索引超出范围的错误。 如果你能帮上忙那就太棒了, 多谢各位

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

1条回答
网友
1楼 · 发布于 2024-03-29 13:28:32

如果颠倒for循环的顺序,从下一个到最后一个项目开始,就不会在从正在处理的列表中删除项目时弄乱循环的范围

因此,在您的例子中,从len(chars)-2开始,转到-1(包括0),然后像这样执行步骤-1for 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']

相关问题 更多 >