Найти значение min в массиве> 0
Я ищу, чтобы найти самое низкое положительное значение в массиве и его позицию в списке. Если значение в списке дублируется, интерес представляет только FIRST-экземпляр. Это то, что у меня есть, что делает то, что я хочу, но включает 0.
print "Position:", myArray.index(min(myArray))
print "Value:", min(myArray)
например, если он, если
myArray = [4, 8, 0, 1, 5]
then Position: 2, Value: 0
Я хочу, чтобы он отображал позицию: 3, значение: 1
Ответы
Ответ 1
Вы можете использовать выражение с помощью 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
Ответ 2
Вы можете использовать функцию 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')
).
Поскольку мы итерации вместе с фактическим индексом элементов, нам не нужно находить фактический индекс с другим циклом.
Ответ 3
Вот еще один способ сделать это с выражением генератора. Обратите внимание, как значения, поступающие из перечисления (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:
Ответ 4
добавьте фильтр, затем:
myArray = [4, 8, 0, 1, 5]
result = min(filter(lambda x: x > 0, myArray))
print result # 1
print myArray.index(result) # 3
Ответ 5
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)
Ответ 6
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)
Ответ 7
сложный алгоритмический способ:
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, теперь является первым элементом, который вы добавили в список.
edit: у вас также будет список каждого индекса наименьшего значения. Некоторые простые проверки могут сказать вам, нет ли элементов в массиве, больших 0, или если список пуст и т.д.