Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List - Fatal编程技术网

对python列表中的两个整数求和

对python列表中的两个整数求和,python,list,Python,List,因此,我是一个Python noobie,我认为学习该语言的一个好方法是在leetcode上使用它来解决一些问题 第一个问题是“给定一个整数数组,返回两个数字的索引,以便它们相加到一个特定的目标。”我用java相当快地编写了一个解决方案,但当我尝试用Python实现它时,得到的值让我挠头。给定输入[3,2,4]和目标值6,它应该返回[1,2],但当前正在返回[0,1] Python: class Solution(): def twoSum(self, nums, target):

因此,我是一个Python noobie,我认为学习该语言的一个好方法是在leetcode上使用它来解决一些问题

第一个问题是“给定一个整数数组,返回两个数字的索引,以便它们相加到一个特定的目标。”我用java相当快地编写了一个解决方案,但当我尝试用Python实现它时,得到的值让我挠头。给定输入[3,2,4]和目标值6,它应该返回[1,2],但当前正在返回[0,1]

Python:

class Solution():
    def twoSum(self, nums, target):
        for i, num1 in enumerate(nums):
            for j, num2 in enumerate(nums, i + 1):

                if (num1 + num2 == target):
                    return [i, j]
爪哇:

类解决方案{
公共静态int[]twoSum(int[]nums,int目标){
对于(int i=0;i

你知道我为什么要得到这个结果吗?

Python中的
enumerate()
的第二个参数并没有做你认为它在做的事情。它不影响列表的哪个元素开始,只影响它返回的索引

您应该做的是:
对于j,枚举中的num2(nums[i+1:],i+1):


它使用Python的切片从列表中删除第一个
i
元素,然后调整
enumerate()
的第二个参数中的索引,以生成正确的输出。

可以使用基于范围的for循环,就像在Java中一样

def twoSum(self, nums, target):
    for i in range(len(nums)):
        sum = nums[i]
        for j in range(i+1, len(nums)):
            if (sum + nums[j] == target):
                return [i, j]

enumerate
的可选第二个参数与您认为的不一样。看起来您的意图是让它将其作为列表中的起点。但它实际做的是将其用作列表元素编号的起点,即它是与列表的第一个元素关联的值。例如:

>>> list(enumerate(["a", "b", "c"], 5))
[(5, 'a'), (6, 'b'), (7, 'c')]
>>> 

因此,在您的例子中,外部循环对元素0、1和2进行编号。内部循环在所有三个元素上进行迭代,但将它们编号为1、2、3。每个循环的第一次迭代是从列表中提取值3,3+3匹配,num1为0,num2为1。

使用基于范围的循环:

class Solution():
    def twoSum(self, nums, target):
        for i in range(len(nums)):
            for j in range(i+1, len(nums)):

                if (nums[i] + nums[j] == target):
                    return [i, j]

在这里,您可以找到一个工作示例:

class Solution():
    def twoSum(self, nums, target):
        for i, num1 in enumerate(nums):
            for j, num2 in enumerate(nums):
                if (j>i and (num1 + num2) == target):
                    return [i, j]
        return "Not found"


print(Solution().twoSum([1,2,3,4,5,6,7,8], 10)) # [1, 7]
print(Solution().twoSum([1,2,3,4,5,6,7,8], 22)) # Not found
print(Solution().twoSum([8,7,6,5,4,3,2,1], 10)) # [0, 6]
print(Solution().twoSum([8,7,6,5,4,3,2,1], 22)) # Not found
您的错误是,从文档中可以看出,您误解了
enumerate
函数中的第二个参数。它实际上是为计数器设置一个起点。如果我们不设置任何值,它将从0开始,这将等于索引

class Solution():
    def twoSum(self, nums, target):
        for i, num1 in enumerate(nums):
            for j, num2 in enumerate(nums):
                if (j>i and (num1 + num2) == target):
                    return [i, j]
        return "Not found"


print(Solution().twoSum([1,2,3,4,5,6,7,8], 10)) # [1, 7]
print(Solution().twoSum([1,2,3,4,5,6,7,8], 22)) # Not found
print(Solution().twoSum([8,7,6,5,4,3,2,1], 10)) # [0, 6]
print(Solution().twoSum([8,7,6,5,4,3,2,1], 22)) # Not found