Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 二和索引列表超出范围_Python_Python 3.x_List_Loops_Nested Lists - Fatal编程技术网

Python 二和索引列表超出范围

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)):

我一直在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)):
            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
    是否在外循环的范围界限内

如果删除最后两行,它会工作,这两行3和4会额外工作;所以

类解决方案:
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)]
。尝试打印要调试的中间步骤的结果。