Поиск минимального элемента с условием

Решаю задачу, в которой создаю массив, заполненный изначально нулями, по ходу решения заполняю его. Нужно найти минимальный элемент массива, не равный нулю и вывести его индекс в исходном массиве. Можно ли это сделать функционально? В смысле, я знаю, что можно пройтись фором по всему массиву, но можно ли какой-то комбинацией встроенных функций сделать это?


Ответы (1 шт):

Автор решения: Xander

Да легко:

data = [3, 5, 0, 7, 2, 8, 4]

result = min(enumerate(data), key=lambda x: x[1] if x[1] != 0 else float('Inf'))[0]

print(result)

Так же, как и в решении с циклом for, этот вариант работает за один проход и не потребляет лишней памяти (по крайней мере, в достаточно актуальных версиях питона, где enumerate работает лениво).

Но читать и отлаживать такое гораздо сложнее, чем простой вариант с циклом. Поэтому используйте лучше цикл.

→ Ссылка