# Finding the index of elements based on a condition using python list comprehension

### Question

The following Python code appears to be very long winded when coming from a Matlab background

``````>>> a = [1, 2, 3, 1, 2, 3]
>>> [index for index,value in enumerate(a) if value > 2]
[2, 5]
``````

When in Matlab I can write:

``````>> a = [1, 2, 3, 1, 2, 3];
>> find(a>2)
ans =
3     6
``````

Is there a short hand method of writing this in Python, or do I just stick with the long version?

Thank you for all the suggestions and explanation of the rationale for Python's syntax.

After finding the following on the numpy website, I think I have found a solution I like:

Applying the information from that website to my problem above, would give the following:

``````>>> from numpy import array
>>> a = array([1, 2, 3, 1, 2, 3])
>>> b = a>2
array([False, False, True, False, False, True], dtype=bool)
>>> r = array(range(len(b)))
>>> r(b)
[2, 5]
``````

The following should then work (but I haven't got a Python interpreter on hand to test it):

``````class my_array(numpy.array):
def find(self, b):
r = array(range(len(b)))
return r(b)

>>> a = my_array([1, 2, 3, 1, 2, 3])
>>> a.find(a>2)
[2, 5]
``````
1
101
4/11/2017 3:31:51 PM

• In Python, you wouldn't use indexes for this at all, but just deal with the valuesâ€”`[value for value in a if value > 2]`. Usually dealing with indexes means you're not doing something the best way.

• If you do need an API similar to Matlab's, you would use numpy, a package for multidimensional arrays and numerical math in Python which is heavily inspired by Matlab. You would be using a numpy array instead of a list.

``````>>> import numpy
>>> a = numpy.array([1, 2, 3, 1, 2, 3])
>>> a
array([1, 2, 3, 1, 2, 3])
>>> numpy.where(a > 2)
(array([2, 5]),)
>>> a > 2
array([False, False,  True, False, False,  True], dtype=bool)
>>> a[numpy.where(a > 2)]
array([3, 3])
>>> a[a > 2]
array([3, 3])
``````
67
9/1/2011 1:20:16 PM