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:

http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays

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]
```

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])`

Licensed under: CC-BY-SA with attribution

Not affiliated with: Stack Overflow