我希望找到数组中的最低正值及其在列表中的位置。如果列表中的值重复,则只关注FIRST实例。这就是我所拥有的,它包括我想要的但包含0。
print "Position:", myArray.index(min(myArray))
print "Value:", min(myArray)
例如,如果是,
myArray = [4, 8, 0, 1, 5]
然后位置:2,价值:0
我希望它呈现位置:3,价值:1
答案 0 :(得分:31)
您可以将generator expression与min
一起使用。这会将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,或者列表是否为空等等。