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

比较列表两元素时出现List index is out of range错误的原因是什么

代码抛出IndexError的原因
  • 索引越界是直接报错原因:
    你的第二个for循环定义为for i in range(len(primes) + 1),同时循环内访问了primes[i + 1]。列表索引从0开始,最大合法索引为len(primes) - 1,按当前的循环范围,i最大可取到len(primes),此时i + 1远大于列表最大索引,必然触发越界错误。
    以你调用的gap(2,100,110)为例,primes列表最终值为[101, 103, 105, 107, 109],长度为5,最大合法索引是4。循环的i会从0遍历到5:当i=4时访问primes[5]不存在,直接抛出IndexError。
    要修复这个问题,把循环范围改成range(len(primes) - 1)即可,保证i+1最大为len(primes) - 1,不会越界。
  • 额外逻辑漏洞:
    当前primes列表仅存储了[m,n]范围内的奇数,并非素数,比如105会被误存入列表,无法实现查找指定间隔素数对的功能,需要补充素数判断逻辑。

修复后参考代码

def is_prime(num):
    if num < 2:
        return False
    if num == 2:
        return True
    if num % 2 == 0:
        return False
    for i in range(3, int(num**0.5) + 1, 2):
        if num % i == 0:
            return False
    return True

def gap(g, m, n):
    primes = list()
    for number in range(m, n + 1):
        if is_prime(number):
            primes.append(number)
    # 修正遍历范围
    for i in range(len(primes) - 1):
        if primes[i + 1] - primes[i] == g:
            return [primes[i], primes[i + 1]]

print(gap(2,100,110))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:45:04