Search code examples
python-3.xlistnumbers

Two Sum function not working with recurring elements in list


I'm trying to complete "Two Sum", which goes as such:

Write a function that takes an array of numbers (integers for the tests) and a target number. It should find two different items in the array that, when added together, give the target value. The indices of these items should then be returned in a tuple like so: (index1, index2).

Efficiency of my code aside, this is what I have so far:

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

It works for inputs such as:

>>> two_sum([1,2,3,4,5,6,7,8,9,10], 11)
(0, 9)

But when I try a list of numbers that have recurring numbers that add up to the target, the code doesn't work:

>>> two_sum([2, 2], 4)
False

The code, for some reason that I cannot figure out, does not reach index [1] of the list, and thus returns False.

Why is that?


Solution

  • The list method index() always returns the first occurence of an item in a list, so numbers.index(i) != numbers.index(t) evaluates to 1 != 1 which is False.

    You should use the builtin enumerate() to store the indices while looping over the list.

    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