python:通过删除lis的一个元素来索引

2024-10-01 13:23:53 发布

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

我想编一个函数来解决一个数学问题。任务以列表的形式分配给函数(例如[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]

通过尝试此操作,将引发索引器错误。你知道吗

 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

谢谢你的帮助!你知道吗


Tags: 函数in列表forleniflinerange
3条回答

因为你初始化了一个运行到列表第一个初始长度的范围。但是如果你删除了一些索引,你的列表就会变小。。。对于仍为初始长度的跑步

顺便说一下。。。你的单子是由双元素组成的吗?否则你可能会对你在部门的准确度产生麻烦

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]

设置要迭代的范围后,将从列表中删除元素,并更改其大小。程序尝试迭代从一开始就有多少项,但现在已经没有那么多项了。你知道吗

del不是函数。不要用圆括号括住目标。)

相关问题 更多 >