两个 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

这样索引就不会与值关联