两个 Sum 函数不适用于列表中的重复元素
Two Sum function not working with recurring elements in list
我正在尝试完成“Two Sum”,它是这样的:
编写一个函数,它接受一个数字数组(用于测试的整数)和一个目标数字。它应该在数组中找到两个不同的项目,当它们加在一起时,给出目标值。这些项目的索引应该在一个元组中返回,如下所示:(index1, index2).
撇开我的代码效率不谈,这是我目前所拥有的:
def two_sum(numbers, target):
for i in numbers:
for t in numbers:
if i + t == target:
if numbers.index(i) != numbers.index(t):
return (numbers.index(i), numbers.index(t))
return False
它适用于以下输入:
>>> two_sum([1,2,3,4,5,6,7,8,9,10], 11)
(0, 9)
但是当我尝试一个数字列表,其中包含循环数字加起来达到目标时,代码不起作用:
>>> two_sum([2, 2], 4)
False
由于某种我无法弄清楚的原因,该代码未到达列表的索引 [1],因此 returns False
.
这是为什么?
列表方法 index()
总是 returns 列表中第一个项目出现,因此 numbers.index(i) != numbers.index(t)
的计算结果为 1 != 1
,即 False
。
您应该使用内置函数 enumerate()
在遍历列表时存储索引。
def two_sum(numbers, target):
for i, number_a in enumerate(numbers):
for j, number_b in enumerate(numbers):
if number_a + number_b == target and i != j:
return (i, j)
return False
'''
return 将打破循环并退出功能,所以首先你需要完成循环,将结果存储在列表中,因为你不能写入元组,
一旦你的循环完成转换列表到元组和 return
'''
def two_sum(numbers, target):
result = []
for i in numbers:
for t in numbers:
if (i + t == target) and (numbers.index(i) != numbers.index(t)):
result.append(i)
result.append(t)
if (len(result)> 0):
return tuple(result)
else:
return False
你的代码看起来不错,除了这部分:
if numbers.index(i) != numbers.index(t):
return (numbers.index(i), numbers.index(t))
return False
因为索引方法returns只是一个值的第一次出现,i和t总是相同的。它总是 return 错误。值 2 在列表中的索引始终为 0,即使在索引 1 处还有另一个 2。
来源:https://www.w3schools.com/python/ref_list_index.asp
你要做的是:
def two_sum(numbers, target):
i_index = 0
t_index = 0
for i in numbers:
for t in numbers:
if i + t == target:
if i_index != t_index:
return (i_index, t_index)
t_index +=1
i_index +=1
return False
这样索引就不会与值关联
我正在尝试完成“Two Sum”,它是这样的:
编写一个函数,它接受一个数字数组(用于测试的整数)和一个目标数字。它应该在数组中找到两个不同的项目,当它们加在一起时,给出目标值。这些项目的索引应该在一个元组中返回,如下所示:(index1, index2).
撇开我的代码效率不谈,这是我目前所拥有的:
def two_sum(numbers, target):
for i in numbers:
for t in numbers:
if i + t == target:
if numbers.index(i) != numbers.index(t):
return (numbers.index(i), numbers.index(t))
return False
它适用于以下输入:
>>> two_sum([1,2,3,4,5,6,7,8,9,10], 11)
(0, 9)
但是当我尝试一个数字列表,其中包含循环数字加起来达到目标时,代码不起作用:
>>> two_sum([2, 2], 4)
False
由于某种我无法弄清楚的原因,该代码未到达列表的索引 [1],因此 returns False
.
这是为什么?
列表方法 index()
总是 returns 列表中第一个项目出现,因此 numbers.index(i) != numbers.index(t)
的计算结果为 1 != 1
,即 False
。
您应该使用内置函数 enumerate()
在遍历列表时存储索引。
def two_sum(numbers, target):
for i, number_a in enumerate(numbers):
for j, number_b in enumerate(numbers):
if number_a + number_b == target and i != j:
return (i, j)
return False
''' return 将打破循环并退出功能,所以首先你需要完成循环,将结果存储在列表中,因为你不能写入元组, 一旦你的循环完成转换列表到元组和 return '''
def two_sum(numbers, target):
result = []
for i in numbers:
for t in numbers:
if (i + t == target) and (numbers.index(i) != numbers.index(t)):
result.append(i)
result.append(t)
if (len(result)> 0):
return tuple(result)
else:
return False
你的代码看起来不错,除了这部分:
if numbers.index(i) != numbers.index(t):
return (numbers.index(i), numbers.index(t))
return False
因为索引方法returns只是一个值的第一次出现,i和t总是相同的。它总是 return 错误。值 2 在列表中的索引始终为 0,即使在索引 1 处还有另一个 2。
来源:https://www.w3schools.com/python/ref_list_index.asp
你要做的是:
def two_sum(numbers, target):
i_index = 0
t_index = 0
for i in numbers:
for t in numbers:
if i + t == target:
if i_index != t_index:
return (i_index, t_index)
t_index +=1
i_index +=1
return False
这样索引就不会与值关联