Комбинация Python filter / max - проверка на пустой итератор

(Использование Python 3.1)

Я знаю, что этот вопрос задавался много раз для общего вопроса о тестировании, если итератор пуст; очевидно, для этого нет подходящего решения (я думаю, по какой-то причине - итератор на самом деле не знает, пуст ли он, пока его не попросят вернуть его следующее значение).

Однако у меня есть конкретный пример, и я надеялся, что может сделать из него чистый и питонический код:

#lst is an arbitrary iterable
#f must return the smallest non-zero element, or return None if empty
def f(lst):
  flt = filter(lambda x : x is not None and x != 0, lst)
  if # somehow check that flt is empty
    return None
  return min(flt)

Есть ли лучший способ сделать это?

РЕДАКТИРОВАТЬ: извините за глупые обозначения. Параметр функции действительно является произвольной итерацией, а не списком.

5
задан max 15 October 2010 в 06:49
поделиться