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

Python按ID排序列表时触发IndexError: list index out of range问题

问题:按ID排序列表时触发IndexError

尝试将成员列表按id字段排序存入新列表,但Python抛出IndexError: list index out of range错误,无法理解问题所在,认为对应索引位置存在值。

代码示例

members = [
  {'id': 1, 'firstname': 'johnny', 'lastname': 'doe'    },
  {'id': 3, 'firstname': 'sky',    'lastname': 'smith'  },
  {'id': 4, 'firstname': 'mary',   'lastname': 'johnes' },
  {'id': 2, 'firstname': 'frank',  'lastname': 'sanchez'}
]

NewMembers = []
i = 0
ids = 1

while len(NewMembers) != len(members):
    if ids == members[i]['id']:
        NewMembers.append(members[i])
        ids += 1
    else:
        i += 1

print(NewMembers)

报错信息

line 8, in <module>
if ids == members[i]['id']:
          ~~~~~~~~^^^
IndexError: list index out of range

错误原因

你的逻辑是逐个查找id等于ids的元素,找到后ids加1,但没有在每次查找新的id时重置索引i。比如:

  1. 找到id=1后,ids变为2,i停在0;
  2. 接下来找id=2,i从0开始递增,直到i=3时匹配到目标元素,此时i变为3;
  3. 继续找id=3,此时i从3开始递增到4,而members的最大索引是3(列表共4个元素),访问members[4]直接触发索引越界。

解决方法

方法1:用Python内置sorted函数(推荐)

这是最简洁高效的方式,直接指定排序键为id:

members = [
  {'id': 1, 'firstname': 'johnny', 'lastname': 'doe'    },
  {'id': 3, 'firstname': 'sky',    'lastname': 'smith'  },
  {'id': 4, 'firstname': 'mary',   'lastname': 'johnes' },
  {'id': 2, 'firstname': 'frank',  'lastname': 'sanchez'}
]

NewMembers = sorted(members, key=lambda x: x['id'])
print(NewMembers)

方法2:修复原逻辑

如果要自己实现查找逻辑,每次查找新的id时需要重置索引i为0:

members = [
  {'id': 1, 'firstname': 'johnny', 'lastname': 'doe'    },
  {'id': 3, 'firstname': 'sky',    'lastname': 'smith'  },
  {'id': 4, 'firstname': 'mary',   'lastname': 'johnes' },
  {'id': 2, 'firstname': 'frank',  'lastname': 'sanchez'}
]

NewMembers = []
ids = 1

while len(NewMembers) != len(members):
    i = 0  # 每次查找新id时重置索引
    while i < len(members):
        if ids == members[i]['id']:
            NewMembers.append(members[i])
            ids += 1
            break
        i += 1

print(NewMembers)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:10:49