# Why is my for loop ending after the first term?

## Question:

very new coder here. I’m trying to solve the classic twonums LeetCode problem (https://leetcode.com/problems/two-sum/) using some of the basics I have learned so far. I can get my program to find the indices of the solutions, but can’t seem to make it recognize when the indices are the same and ignore that solution. Most likely I am just not ready for this problem yet, but I’m curious if it’s possible with these tools and I’m missing something. Any and all help is appreciated.

```
num = [3, 3]
target = 6
def twonum(num):
for x in num:
for y in num:
a = num.index(x)
b = num.index(y)
if (x + y == target) and (a != b):
return(f'{b, a}')
break
ans = twonum(num)
print(ans)
```

## Answers:

`num.index(x)`

gives you the *first* index of `x`

in `num`

, which may not be what you want if there are multiple occurrences. Try replacing:

```
for x in num:
for y in num:
a = num.index(x)
b = num.index(y)
```

with:

```
for a, x in enumerate(num):
for b, y in enumerate(num):
```

If there is a guaranteed solution (i.e., that there are two numbers in the list that sum to the target) then you can do this:

```
def twosum(lst, tgt):
d = {}
for i, n in enumerate(lst):
try:
j = d[tgt-n]
return [i, j]
except KeyError:
d[n] = i
print(twosum([1, 5, 3, 3, 2, 4], 9))
```

**Output:**

```
[5, 1]
```

**Note:**

If there is no solution this will implicitly return None