当前位置: 首页 > 知识库问答 >
问题:

比较列表中的int值会导致索引超出范围错误

隆飞宇
2023-03-14

我正在努力抓住这个问题。我已经尝试了一切,但问题依然存在。基本上,我有一个随机数列表,当我试图比较循环中的值时,它抛出“indexer-ror:list-index-out-range”

我甚至尝试了范围(伦(谁)和伦(谁)。同样的事情。当把0而不是"当前技能"这是int变量它的工作。我不明白的是为什么比较两个值会抛出这个错误。这只是没有意义...

我不是在比较一个值,而是在比较索引本身吗???

编辑:我甚至试着用print(I)/print(who[I]来看看是否一切都干净,它停在哪里,我肯定不会超出索引

who = [2, 0, 1]
currentskill = 1

for i in who:
        if who[i] == currentskill: # IndexError: list index out of range
            who.pop(i)

共有3个答案

强化
2023-03-14

代码中有两个问题:

>

  • 正如另一个答案所指出的那样,混淆了数值和指数;和

    在迭代列表时修改列表

    解决方案取决于您是只删除一项,还是可能删除多项。

    要仅删除一项,请执行以下操作:

    for idx, i in enumerate(who)::
        if i == currentskill: 
            who.pop(idx)
            break
    

    要删除多个项目,请执行以下操作:

    to_remove = []
    for idx, i in enumerate(who)::
        if i == currentskill: 
            to_remove.append[idx]
    for idx in reversed(to_remove):
            who.pop(idx)
    

    根据具体情况,创建新列表可能更容易:

    who = [i for i in who if i != currentskill]
    

  • 公羊伟志
    2023-03-14

    如@Hemesh所述

    问题是,一旦您开始弹出元素,列表大小就会发生变化

    问题解决了。我现在只是弹出循环外的元素,它的工作原理:

    def deleteskill(who, currentskill):
       temp = 0
       for i in range(len(who)):
           if who[i] == currentskill:
               temp = i
       who.pop(temp)
    
    马新觉
    2023-03-14

    问题是,一旦您开始弹出元素,列表大小就会发生变化

    例如,获取一个大小为6的列表,但您迭代了len(l)-1=6-1=5之前的所有索引,并且在上一次迭代中删除元素后,该列表中不存在索引5。

    这个问题的解决方案,l=[x代表l中的x,如果x]这里x是一个条件,您希望在正在迭代的列表元素上实现。

     类似资料:
    • 我试着运行这个: 但是得到这个错误: 回溯(最后一次调用): 文件“C:\Users\Shakh\Desktop\Hello3.py”,第4行,在 打印(“Hallo”,sys.argv[1]) 索引器:列表索引超出范围

    • 我已经使用创建了“CfnUserPool”对象https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_cognito/CfnUserPool.html aws文件。 我想获取UserPool的“Pool Id”。其Id值为“us-east-1_4kxxxxxx”。我使用python尝试了很多选项来获取这个值,但都没有成功。 所以我

    • 问题内容: 我在读取CSV文件时遇到此错误(无标题,3列,第二和第三字符串): 这是下面代码的一部分。坚持起来简直是愚蠢的简单事情,但是对于如何工作我只是空白。我是编码的新手,但是之前已经处理过csv模块,并且从来没有遇到过这方面的问题,只是在记事本中制作了一些测试csv文件,以查看是否可以从相同的代码中读取它,并且可以。我不知道。 问题答案: 尝试检查空白行。另外,请避免将其用作变量名。是打开的

    • 我有一个基于Euler项目问题3的代码:“13195的素数因子是5、7、13和29。600851475143中最大的素数因子是什么?” 我在下面有一个我认为可行的代码,但第9行()不断返回错误:“索引器:列表索引超出范围”。当我在for循环中移动时,似乎并没有修改列表,所以我不确定出了什么问题。 有人知道我哪里错了吗? 非常感谢。

    • 问题内容: 每当我运行xhtml时。它给了我以下例外。statusindex对象的值为5。我正在使用JQuery进行延迟滚动,因此当我的xhml页面getMoreStatusList调用getMoreStatusList函数时,它为我提供了超出范围的异常的索引。数据库中有26个状态更新,因此索引超出范围的异常对我来说毫无意义。 1)代码 2)例外 问题答案: 消息说是30。这不是您认为的5,而是2

    • 问题内容: 我在以下Python代码部分遇到问题: 具体的错误如下: 我已经进行了一些研究,似乎在运行脚本时,可能在命令行中需要一个参数,但是我不确定要添加什么或可能是什么问题!我也搜索了该站点,但是我发现的所有解决方案都没有评论,并且/或者没有像我一样包含开放功能。 任何帮助是极大的赞赏。 问题答案: 表示执行脚本所使用的命令行选项。 是您正在运行的脚本的名称。所有其他选项都包含在中。 您正在尝