Python find list indices subject to condition

I have a list, say:

list_A = [0,0,0,1.0,2.0,3.0,2.0,1.0,0,0,0] 

I would like to find the minimum and maximum indices of this list, where list_A> 0.

i.e. in the example above it will be 3 and 7.

For other lists that grow monotonously, I used np.searchsorted , for example np.searchsorted(list,[0.5,1.0]) , to find indices in which the list is between 0.5 and 1.0 respectively.

But this case is completely different, and np.searchsorted doesn't work here, or maybe it does it the way I don't know!

+5
source share
3 answers

Filter the encrypted list with its indices and take min and max:

 >>> list_A = [0,0,0,1.0,2.0,3.0,2.0,1.0,0,0,0] >>> filtered_lst = [(x,y) for x,y in enumerate(list_A) if y > 0] >>> max(filtered_lst) (7, 1.0) >>> min(filtered_lst) (3, 1.0) 

If you only need an index, unzip the return value:

 >>> maX,_ = max(filtered_lst) >>> maX 7 
+4
source

An alternative could be to use next() :

 list_A = [0,0,0,1.0,2.0,3.0,2.0,1.0,0,0,0] print(next(idx for idx, item in enumerate(list_A) if item>0)) print(next(len(list_A)-1-idx for idx, item in enumerate(list_A[::-1]) if item>0)) 

Output

 3 7 

Using next() to find the first item in a list > 0 is an elegant solution.

To find the last element in a list > 0 , this method is more complicated. I use next() to iterate over and search for the first element > 0 in the reverse list using list_A[::-1] . Then I convert the index generated to the correct index by subtracting it from len(list)-1 using len(list)-1-idx .

+2
source

You can use the np.where function to return the indices of all elements > 0

 In [116]: list_A = [0,0,0,1.0,2.0,3.0,2.0,1.0,0,0,0] In [117]: arr = np.array(list_A) In [118]: indx = np.where(arr > 0)[0] In [119]: mini = indx[0] In [120]: mini Out[120]: 3 In [121]: maxi = indx[-1] In [122]: maxi Out[122]: 7 
0
source

Source: https://habr.com/ru/post/1240081/


All Articles