如何修复python中的“列表索引超出范围”?

2024-09-29 06:29:33 发布

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

#function description   
 def getMoneySpent(keyboards, drives, b):
        q = []
        for i in range(len(keyboards)):
            for j in range(len(drives)):
                q.append(keyboards[i] + drives[j]) 
        for m in range(len(q)):
            if(q[m] > b):
                q.remove(q[m])
            else:
                pass
        if q is not None:
            return max(q)
        else:
            return -1

错误消息是:

Traceback (most recent call last):
    File "Solution.py", line 42, in <module>
        moneySpent = getMoneySpent(keyboards, drives, b)
    File "Solution.py", line 15, in getMoneySpent
        if(q[m] > b):
    IndexError: list index out of range

不断收到此错误消息。这是hackerrank中的一个问题。我将链接以下内容,以供任何需要进一步参考的人使用:

https://www.hackerrank.com/challenges/electronics-shop/problem


Tags: inpy消息forlenreturnif错误
2条回答

问题是q.remove(q[m]),您在迭代列表时正在从列表中删除项

一种解决方案是将所有需要删除的m保存在另一个列表中,并在循环完成后删除它们

您可以查看这些链接以获得更好的线索:

How to delete list items while iterating

Another link

你可以理解这一点:

q[:] = [i for i in q if i <= b]

将这条线而不是for循环放在q上

还请注意:

else:
    pass

是多余的,可以删除

您可以尝试以下方法:

def getMoneySpent(keyboards, drives, b):
    q = []
    for k in keyboards :
        for d in drives :
            price = k + d
            if price <= b :
                q.append(price) 

    return max(q) if q else -1

与其删除元素,不如先不添加它们

相关问题 更多 >