为何这段twoSum代码的while循环不会触发IndexError?
为什么你的twoSum代码里i到3没触发IndexError?
首先明确:Python里访问nums[3](当nums长度为3时)肯定会触发IndexError,但你的代码没报错,说明i=3的时候,你根本没执行nums[3]的访问操作。
拿你给的测试用例nums=[3,2,4]、target=6来说:
- 正确解是索引1和2(2+4=6)。不管你的代码是单遍历找补数还是双指针逻辑,只要逻辑正确,在i增长到3之前,代码就已经找到符合条件的数对,直接return结果了,根本不会让i走到3这一步。
- 如果你的代码里有索引增长到等于列表长度的情况(比如j=3),那代码里大概率只是做了条件判断(比如
if j == len(nums)),然后调整其他变量(比如i+1,j重置为i+1),并没有去访问nums[j],自然不会触发索引错误。
举个类似的代码例子,你可以参考:
def twoSum(nums, target): i = 0 j = 1 while nums[i] + nums[j] != target: j += 1 # 这里j增长到3时,只是判断条件,没访问nums[3] if j == len(nums): i += 1 j = i + 1 return [i, j]
在这个代码里,j会走到3,但此时代码只是触发i +=1和j重置,然后回到while循环判断nums[1]+nums[2],完全没碰nums[3],所以不会报错。
简单总结:要么代码提前返回终止了,要么索引越界的那个值根本没被用来访问列表元素。
内容的提问来源于stack exchange,提问作者Yize Zhao
相关产品推荐
相关产品推荐

