Find min value in array > 0

前端 未结 7 1958
夕颜
夕颜 2021-02-07 05:49

I am looking to find the lowest positive value in an array and its position in the list. If a value within the list is duplicated, only the FIRST instance is of interest. This i

相关标签:
7条回答
  • 2021-02-07 06:11

    You can use the min function and enumerate function, like this

    result = min(enumerate(a), key=lambda x: x[1] if x[1] > 0 else float('inf'))
    print("Position : {}, Value : {}".format(*result)
    # Position : 3, Value : 1
    

    This makes sure that, if the value is greater than 0, then use that value for the minimum value comparison otherwise use the maximum possible value (float('inf')).

    Since we iterate along with the actual index of the items, we don't have to find the actual index with another loop.

    0 讨论(0)
  • 2021-02-07 06:12
    def find_min_position(array):
        plus_array = [elem for elem in array if elem > 0]
        min_elem = min(plus_array)
        return min_elem, array.index(min_elem)
    
    In : find_min_position([4, 8, 0, 1, 5])
    Out: (1, 3)
    
    0 讨论(0)
  • 2021-02-07 06:17

    Here is another way of doing it with a generator expression. Note how the values coming from enumerate (a and b) are swapped in the tuple to sort correctly.

    value,position = min(((b,a) for a,b in enumerate(myArray) if b>0), default=(None,None))
    

    The default argument will be returned when the generator expression returns nothing (i.e. there are no items greater than 0). The default can be set to whatever makes sense in the surrounding program logic - here returning None will allow you to test with either if value: or if position:

    0 讨论(0)
  • 2021-02-07 06:19

    You can use a generator expression with min. This will set m as the minimum value in a that is greater than 0. It then uses list.index to find the index of the first time this value appears.

    a = [4, 8, 0, 1, 5]
    
    m = min(i for i in a if i > 0)
    
    print("Position:", a.index(m))
    print("Value:", m)
    # Position: 3
    # Value: 1
    
    0 讨论(0)
  • 2021-02-07 06:21
    import numpy as np
    
    x = np.array([1,2,0,5,10])
    x = np.extract(x>0,x)
    min_index = np.amin(x)
    min_value = np.argmin(x)
    
    0 讨论(0)
  • 2021-02-07 06:30

    add a filter then :

    myArray = [4, 8, 0, 1, 5]
    result = min(filter(lambda x: x > 0, myArray))
    print result # 1
    print myArray.index(result) # 3
    
    0 讨论(0)
提交回复
热议问题