[Python] Генераторы, min/max, пустая последовательность
От: slava_phirsov Россия  
Дата: 05.04.10 06:15
Оценка:
Доброго времени суток всем читающим.

Вот такой вопрос: требуется найти min (или max) последовательности, генерируемой функцией-генератором, что-то вроде

def foo(bar):
  for i in bar:
    .....
    yield buzz

x = min(foo(y))


Проблема в том, что foo() может генерировать и пустую последовательность, т.е. вывалиться без единого захода в ветку содержащую yield. Поскольку min (и max) от пустой последовательности — это полный нонсенс , то в этом случае вылетаем с исключением ValueError:

ValueError: min() arg is an empty sequence


Можно конечно сделать вот так:

x = ()
try:
  x = min(foo(y))
except ValueError:
  pass


Но это как-то не того

Еще вариант:

def foo(bar):
  for i in bar:
    .....
    yield buzz
  yield ()

x = max(foo(y))


Пустая последовательность, сгенерированная на выходе из foo(), насколько я понимаю, меньше любой другой последовательности. Отмечу также, что в этом случае потребовалось слегка переработать алгоритм с тем, чтобы потребовалось искать не min а max (min в таком варианте, очевидно, даст нам пустую последовательность). Если алгоритм не допускает такую переработку — тем хуже для алгоритма.

А есть ли более кошерные варианты решения задачи?
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.