Python 二和索引列表超出范围
我一直在leetcode上的“两个和”问题上出现错误“列表索引超出范围”,我知道有一种更快的方法可以使用dict解决它。然而,我刚刚开始leetcode,我想知道为什么会出现此错误Python 二和索引列表超出范围,python,python-3.x,list,loops,nested-lists,Python,Python 3.x,List,Loops,Nested Lists,我一直在leetcode上的“两个和”问题上出现错误“列表索引超出范围”,我知道有一种更快的方法可以使用dict解决它。然而,我刚刚开始leetcode,我想知道为什么会出现此错误 class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: i = 0 j = i + 1 for i in range(len(nums)):
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
i = 0
j = i + 1
for i in range(len(nums)):
for j in range(len(nums)):
if i + j == target:
return(nums[i], nums[j])
else:
i = i + 1
您在内部
j
循环的else
分支中递增i
。这将以与内部循环中的j
相同的速度向前移动i
变量。因此,当外部循环中的i
大于零时,您将得到一个越界错误,假设您的索引没有与目标求和,正如在if
中检查的那样
不过,编写的代码有几个问题
- 在开始循环之前,将
设置为j
。它将在内部循环的每次启动时立即被覆盖(由i+1
方法调用定义)范围
- 如果i+j==target,则应在这些索引处检查数组的值,如
,则检查如果nums[i]+nums[j]==target
- 在内部
循环中递增j
变量,而不在该循环中检查它。当外循环结束时,i
检查仅验证range
是否在外循环的范围界限内i
类解决方案:
def twoSum(self,nums:List[int],target:int)->List[int]:
对于范围内的i(len(nums)):
对于范围内的j(len(nums)):
如果i+j==目标:
返回值(nums[i],nums[j])
如果i需要在j上方1个数字:
类解决方案:
def twoSum(self,nums:List[int],target:int)->List[int]:
对于范围内的i(len(nums)):
对于范围(1,len(nums)+1)内的j:
如果i+j==目标:
返回值(nums[i],nums[j])
i=i+1
更改i
的值,以便nums[i]
可以访问导致错误的num[len(nums)]
。尝试打印要调试的中间步骤的结果。