首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中修正“超出范围的列表索引”?

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

Stack Overflow用户
提问于 2020-05-19 07:22:39
回答 2查看 1.1K关注 0票数 2
代码语言:javascript
复制
#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

错误信息是:

代码语言:javascript
复制
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

继续获取此错误message.This是hackerrank中的一个问题,我将链接到下面的链接,供任何需要进一步参考的人使用:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-19 07:55:33

您可以尝试这样做:

代码语言:javascript
复制
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

与其删除元素,不如先不要添加元素.

票数 0
EN

Stack Overflow用户

发布于 2020-05-19 07:25:13

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

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

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

如何在迭代时删除列表项

另一个链接

你可以理解这一点:

代码语言:javascript
复制
q[:] = [i for i in q if i <= b]

在q上放置这一行而不是for循环。

还注意到:

代码语言:javascript
复制
else:
    pass

是多余的,你可以删除。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61885364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档