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