比较列表两元素时出现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
相关产品推荐
相关产品推荐

