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

为何在Python中使用range(len(n)-1)而非range(len(n))?

为什么要使用range(len(n)-1)而非range(len(n))?

核心原因很直接:避免索引越界错误,同时砍掉无意义的循环。当你在循环里需要访问当前索引的下一个(i+1)、下下个(i+2)元素时,直接用range(len(n))会让循环走到最后几个索引时,超出序列的有效索引范围——毕竟列表/字符串的最大有效索引是len(n)-1,i+1会等于len(n),触发IndexError报错。

结合你给出的场景逐个拆解:

1. 查找列表中某个数的两倍值

修正后的完整代码:

def double(n):
    for i in range(len(n)-1):
        if n[i]*2 == n[i+1]:
            print(n[i+1])

这里循环要访问n[i+1],如果用range(len(n)),当i取到最后一个索引len(n)-1时,i+1 = len(n),这已经超出了列表的索引范围(列表索引从0到len(n)-1),直接报错。用range(len(n)-1)能让i的最大值停在len(n)-2,此时i+1刚好是最后一个有效索引,不会越界。

2. 统计字符串中逆序对的次数

修正后的完整代码:

def inversion(n):
    inv = 0
    for i in range(len(n)-1):
        for j in range(i+1, len(n)):
            if n[i] > n[j]:
                inv += 1
                break
  • 外层循环用range(len(n)-1):逆序对需要i后面有元素(j从i+1开始),最后一个元素后面没有其他元素,根本没法形成逆序对,完全没必要循环到它。
  • 内层循环用range(i+1, len(n)):一是保证j从i的下一个位置开始,避免重复比较(比如不会出现i=1,j=0这种和i=0,j=1重复的情况);二是j的最大值是len(n)-1,刚好是最后一个有效索引,不会越界。

3. 判断字符串是否存在连续三个相同字符

修正后的完整代码(原代码缺少循环逻辑):

def triples(n):
    for i in range(len(n)-2):
        if n[i] == n[i+1] == n[i+2]: 
            return True
    return False

这里需要同时访问i、i+1、i+2三个位置的元素,所以i的最大值只能是len(n)-3,这样i+2才等于len(n)-1(最后一个有效索引)。如果用range(len(n)),当i取len(n)-1或len(n)-2时,i+2都会超出索引范围,直接报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:50:24