# python – for loop with two variables?

## python – for loop with two variables?

If you want the effect of a nested for loop, use:

```
import itertools
for i, j in itertools.product(range(x), range(y)):
# Stuff...
```

If you just want to loop simultaneously, use:

```
for i, j in zip(range(x), range(y)):
# Stuff...
```

Note that if `x`

and `y`

are not the same length, `zip`

will truncate to the shortest list. As @abarnert pointed out, if you dont want to truncate to the shortest list, you could use `itertools.zip_longest`

.

**UPDATE**

Based on the request for a function that will read lists t1 and t2 and return all elements that are identical, I dont think the OP wants `zip`

*or* `product`

. I think they want a `set`

:

```
def equal_elements(t1, t2):
return list(set(t1).intersection(set(t2)))
# You could also do
# return list(set(t1) & set(t2))
```

The `intersection`

method of a `set`

will return all the elements common to it and another set (Note that if your lists contains other `list`

s, you might want to convert the inner `list`

s to `tuples`

first so that they are hashable; otherwise the call to `set`

will fail.). The `list`

function then turns the set back into a list.

**UPDATE 2**

OR, the OP might want elements that are identical in *the same position in the lists*. In this case, `zip`

would be most appropriate, and the fact that it truncates to the shortest list is what you would want (since it is impossible for there to be the same element at index 9 when one of the lists is only 5 elements long). If that is what you want, go with this:

```
def equal_elements(t1, t2):
return [x for x, y in zip(t1, t2) if x == y]
```

This will return a list containing only the elements that are the same and in the same position in the lists.

Theres two possible questions here: how can you iterate over those variables *simultaneously*, or how can you loop over their *combination*.

Fortunately, theres simple answers to both. First case, you want to use `zip`

.

```
x = [1, 2, 3]
y = [4, 5, 6]
for i, j in zip(x, y):
print(str(i) + / + str(j))
```

will output

```
1 / 4
2 / 5
3 / 6
```

Remember that you can put *any iterable* in `zip`

, so you could just as easily write your exmple like:

```
for i, j in zip(range(x), range(y)):
# do work here.
```

**Actually, just realised that wont work.** It would only iterate until the smaller range ran out. In which case, it sounds like you want to iterate over the combination of loops.

In the other case, you just want a nested loop.

```
for i in x:
for j in y:
print(str(i) + / + str(j))
```

gives you

```
1 / 4
1 / 5
1 / 6
2 / 4
2 / 5
...
```

You can also do this as a list comprehension.

```
[str(i) + / + str(j) for i in range(x) for j in range(y)]
```

Hope that helps.

#### python – for loop with two variables?

Any reason you cant use a nested for loop?

```
for i in range(x):
for j in range(y):
#code that uses i and j
```