Logan Yang - 2 years ago 132
Python Question

# Finding the indices of matching elements in list in Python

I have a long list of float numbers ranging from 1 to 5, called "average", and I want to return the list of indices for elements that are smaller than a or larger than b

``````def find(lst,a,b):
result = []
for x in lst:
if x<a or x>b:
i = lst.index(x)
result.append(i)
return result

matches = find(average,2,4)
``````

But surprisingly, the output for "matches" has a lot of repetitions in it, e.g.
`[2, 2, 10, 2, 2, 2, 19, 2, 10, 2, 2, 42, 2, 2, 10, 2, 2, 2, 10, 2, 2, ...]`
.

Why is this happening?

You are using `.index()` which will only find the first occurrence of your value in the list. So if you have a value 1.0 at index 2, and at index 9, then `.index(1.0)` will always return `2`, no matter how many times `1.0` occurs in the list.

Use `enumerate()` to add indices to your loop instead:

``````def find(lst, a, b):
result = []
for i, x in enumerate(lst):
if x<a or x>b:
result.append(i)
return result
``````

You can collapse this into a list comprehension:

``````def find(lst, a, b):
return [i for i, x in enumerate(lst) if x<a or x>b]
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download