在数组中查找最小值 > 0
Find min value in array > 0
我要查找数组中的最小正值及其在列表中的位置。如果列表中的值重复,则只对第一个实例感兴趣。这就是我所拥有的,它可以做我想做的,但包括 0。
print "Position:", myArray.index(min(myArray))
print "Value:", min(myArray)
例如,如果,
myArray = [4, 8, 0, 1, 5]
然后位置:2,值:0
我希望它显示位置:3,值:1
您可以将 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
然后添加过滤器:
myArray = [4, 8, 0, 1, 5]
result = min(filter(lambda x: x > 0, myArray))
print result # 1
print myArray.index(result) # 3
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)
你可以使用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')
)。
由于我们是根据项目的实际索引进行迭代的,因此我们不必使用另一个循环来查找实际索引。
这是使用生成器表达式的另一种方法。请注意来自枚举(a 和 b)的值如何在元组中交换以正确排序。
value,position = min(((b,a) for a,b in enumerate(myArray) if b>0), default=(None,None))
当生成器表达式returns 什么都没有(即没有大于 0 的项目)时,将返回默认参数。默认值可以设置为在周围程序逻辑中有意义的任何值 - 这里返回 None
将允许您使用 if value:
或 if position:
进行测试
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)
复杂/算法方式:
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的元素,或者列表是否为空等等
我要查找数组中的最小正值及其在列表中的位置。如果列表中的值重复,则只对第一个实例感兴趣。这就是我所拥有的,它可以做我想做的,但包括 0。
print "Position:", myArray.index(min(myArray))
print "Value:", min(myArray)
例如,如果,
myArray = [4, 8, 0, 1, 5]
然后位置:2,值:0
我希望它显示位置:3,值:1
您可以将 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
然后添加过滤器:
myArray = [4, 8, 0, 1, 5]
result = min(filter(lambda x: x > 0, myArray))
print result # 1
print myArray.index(result) # 3
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)
你可以使用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')
)。
由于我们是根据项目的实际索引进行迭代的,因此我们不必使用另一个循环来查找实际索引。
这是使用生成器表达式的另一种方法。请注意来自枚举(a 和 b)的值如何在元组中交换以正确排序。
value,position = min(((b,a) for a,b in enumerate(myArray) if b>0), default=(None,None))
当生成器表达式returns 什么都没有(即没有大于 0 的项目)时,将返回默认参数。默认值可以设置为在周围程序逻辑中有意义的任何值 - 这里返回 None
将允许您使用 if value:
或 if position:
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)
复杂/算法方式:
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的元素,或者列表是否为空等等