(Использование 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)
Есть ли лучший способ сделать это?
РЕДАКТИРОВАТЬ: извините за глупые обозначения. Параметр функции действительно является произвольной итерацией, а не списком.