在数组中查找最小值> 0

时间:2015-01-15 15:21:54

标签: python list search min

我希望找到数组中的最低正值及其在列表中的位置。如果列表中的值重复,则只关注FIRST实例。这就是我所拥有的,它包括我想要的但包含0。

print "Position:", myArray.index(min(myArray))
print "Value:", min(myArray)

例如,如果是,

myArray = [4, 8, 0, 1, 5]

然后位置:2,价值:0

我希望它呈现位置:3,价值:1

7 个答案:

答案 0 :(得分:31)

您可以将generator expressionmin一起使用。这会将m设置为a中大于0的最小值。然后使用list.index查找此值第一次出现的索引。

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

答案 1 :(得分:9)

您可以使用min功能和enumerate功能,就像这样

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

这确保,如果值大于0,则使用该值进行最小值比较,否则使用最大可能值(float('inf'))。

由于我们与项目的实际索引一起迭代,我们不必通过另一个循环找到实际索引。

答案 2 :(得分:4)

这是使用生成器表达式执行此操作的另一种方法。请注意来自枚举(a和b)的值如何在元组中交换以正确排序。

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

当生成器表达式不返回任何内容时(即没有大于0的项),将返回默认参数。默认设置可以设置为周围程序逻辑中有意义的任何内容 - 此处返回None将允许您使用if value:if position:进行测试

答案 3 :(得分:1)

然后添加一个过滤器:

myArray = [4, 8, 0, 1, 5]
result = min(filter(lambda x: x > 0, myArray))
print result # 1
print myArray.index(result) # 3

答案 4 :(得分:1)

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)

答案 5 :(得分:0)

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)

答案 6 :(得分:0)

复杂/算法方式:

int min = array[0], i = 1
list smallest //list of indexes of the smallest element 

// find the first element greater than 0
while (min <= 0 and i < array.length) {
    min = array[i]
    i++
}

// find the first instance of the smallest element greater than 0
while (i < array.length) {
    if (array[i] < min and array[i] > 0) {
        clear the list
        min = array[i]
        list.append(i)
    }
    else if (array[i] == min) {
        list.append(i)
    }
    i++;
}

大于0的最小元素的第一个实例现在是您添加到列表中的第一个元素。

编辑:您还将拥有最小值的每个索引的列表。一些简单的检查可以告诉您数组中的元素是否大于0,或者列表是否为空等等。