You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python嵌套循环触发IndexError: list index out of range求助

问题分析与修复

1. 索引越界的直接原因

你代码里的items列表是从初始inventory的键生成的,初始inventory只有['gold coin', 'rope']两个元素,所以items的长度是2。但外层循环的i是遍历addedItems的索引(长度为5),当i >= 2时,items[i]就会触发IndexError,因为items根本没有索引2、3、4的元素。

而且这段双重循环的逻辑完全错误:你本来是想对比addedItems[i]和inventory里的每个键,但写成了和items[i]对比,完全不符合需求。

2. 其他隐藏问题

  • inventory[items[j]] =+ 1是错误写法,=+是赋值正1,不是累加,正确的累加应该是+= 1
  • addToInventory函数没有返回值,最后inv = addToInventory(...)会把inv变成None,导致后续displayInventory(inv)报错
  • 用双重循环遍历效率低,Python字典本身可以直接通过键判断存在性,不需要把键存到列表里再遍历

3. 修复后的代码

def displayInventory(inventory):
    print("Inventory: ")
    item_total = 0
    for k, v in inventory.items():
        item_total += v
        print(v, k)
    print("Total number of items: " + str(item_total))

def addToInventory(inventory, addedItems):
    for item in addedItems:
        # 存在则加1,不存在则设为1
        inventory[item] = inventory.get(item, 0) + 1
    # 返回修改后的inventory
    return inventory

inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
displayInventory(inv)

4. 代码说明

  • 直接遍历addedItems里的每个物品,用inventory.get(item, 0)获取当前数量(不存在则返回0),再加1赋值回去,逻辑简洁高效
  • 确保addToInventory返回修改后的inventory,外部的inv变量才能拿到更新后的字典
  • 去掉了多余的items和amount列表,字典本身的键查找是O(1)效率,比遍历列表更快

内容的提问来源于stack exchange,提问作者ZhNgR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:50:25