python:删除列表元素的IndexError

时间:2013-08-14 18:32:10

标签: python list for-loop range

我想编写一个解决数学任务的函数。任务被赋予作为列表的函数(例如[3,'+',4,'*',15]),并且应该通过考虑乘法和除法来解决。

def getresult(TaskAsList):
    """Ermitle Ergebnis einer Aufgabe – Aufgabe muss als Liste zugeführt werden"""
    while len(TaskAsList)>1:
        for i in range(len(TaskAsList)-1):
                if TaskAsList[i] == '*':
                    TaskAsList[i-1] = TaskAsList[i-1]*TaskAsList[i+1]
                    del(TaskAsList[i+1])
                    del(TaskAsList[i])
                elif TaskAsList[i] == ':':
                    TaskAsList[i-1] = TaskAsList[i-1]/TaskAsList[i+1]
                    print(i)
                    del(TaskAsList[i+1])
                    del(TaskAsList[i])
        for i in range(len(TaskAsList)-1):
                if TaskAsList[i] == '+':
                    TaskAsList[i-1] = TaskAsList[i-1]+TaskAsList[i+1]
                    del(TaskAsList[i+1])
                    del(TaskAsList[i])
                elif TaskAsList[i] == '-':
                    TaskAsList[i-1] = TaskAsList[i-1]-TaskAsList[i+1]
                    del(TaskAsList[i+1])
                    del(TaskAsList[i])

    return TaskAsList[0]

通过尝试此操作,将引发IndexError。

 Traceback (most recent call last):   File "<stdin>", line 1, in
 <module>   File "./task_generator.py", line 30, in getresult
     del(TaskAsList[i]) IndexError: list index out of range

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

将范围设置为迭代后,您将从列表中删除元素,并更改其大小。该程序试图从一开始就迭代尽可能多的项目,但不再有那么多项目了。

del不是函数。不要在目标周围加上括号。)

答案 1 :(得分:0)

因为您初始化了一个运行到列表第一个初始长度的范围。但是如果删除了一些索引,那么列表会变得更小......并且for仍然会运行到初始长度

顺便说一句......你的列表是否包含双重元素?否则你可能会在你的准确性方面遇到麻烦

答案 2 :(得分:0)

def getresult(TaskAsList):
    while len(TaskAsList)>1:
        while ('*' in TaskAsList) or (':' in TaskAsList):
            for i in range(len(TaskAsList)-1):
                    if TaskAsList[i] == '*':
                        TaskAsList[i-1] = TaskAsList[i-1]*TaskAsList[i+1]
                        del(TaskAsList[i+1])
                        del(TaskAsList[i])
                        break
                    elif TaskAsList[i] == ':':
                        TaskAsList[i-1] = TaskAsList[i-1]/TaskAsList[i+1]
                        print(i)
                        del(TaskAsList[i+1])
                        del(TaskAsList[i])
                        break
        for i in range(len(TaskAsList)-1):
                if TaskAsList[i] == '+':
                    TaskAsList[i-1] = TaskAsList[i-1]+TaskAsList[i+1]
                    del(TaskAsList[i+1])
                    del(TaskAsList[i])
                    break
                elif TaskAsList[i] == '-':
                    TaskAsList[i-1] = TaskAsList[i-1]-TaskAsList[i+1]
                    del(TaskAsList[i+1])
                    del(TaskAsList[i])
                    break

    return TaskAsList[0]