移除sortedSquares函数n-1行注释引发TypeError,求n-1作用解析
双指针代码中
n-1的作用解析 我在学习双指针概念时看到一段代码,对其中start, end = 0, n -1里的n-1存在疑惑,原本以为它没必要,但移除该行注释后程序返回错误:TypeError: cannot unpack non-iterable int object,想知道n-1对计算机的实际作用是什么。
原代码如下:
def sortedSquares(nums): n = len(nums) start, end = 0, n -1 ## 此处我有疑惑,为什么需要'n - 1' res = [0]*n idx = n-1 while end > -1 and idx >-1: if abs(nums[start]) > abs(nums[end]): res[idx] = nums[start] * nums[start] start +=1 else: res[idx] = nums[end] * nums[end] end -= 1 idx -= 1 return res print(sortedSquares([-4,-3,0,1,10]))
关于n-1的作用:
- Python里列表的索引是从0开始计数的:假设列表长度为
n,第一个元素的索引是0,最后一个元素的索引就是n-1。如果直接用n作为end的初始值,访问nums[end]时会触发IndexError(索引超出列表范围)。 - 这段双指针代码的逻辑是从数组两端向中间遍历,
start指向第一个元素,end必须指向最后一个元素,所以要用n-1来定位正确的索引位置。
关于你遇到的报错:
你提到移除注释后出现TypeError: cannot unpack non-iterable int object,这应该是移除注释时不小心破坏了代码结构——比如误删了0和n-1之间的逗号,导致代码变成start, end = 0 n -1。此时右边是一个单独的整数表达式,无法被解包赋值给start和end两个变量,所以触发了这个错误。和n-1本身无关,是代码语法被破坏导致的。
内容的提问来源于stack exchange,提问作者user21283209
相关产品推荐
相关产品推荐

