исчерпанные итераторы - что с ними делать?

(В Python 3.1) (В некоторой степени связанный с другим вопросом, который я задал , но этот вопрос касается исчерпания итераторов.)

# trying to see the ratio of the max and min element in a container c
filtered = filter(lambda x : x is not None and x != 0, c)
ratio = max(filtered) / min(filtered)

Мне потребовалось полчаса, чтобы понять, в чем проблема (итератор, возвращенный фильтром, исчерпан к моменту времени он переходит ко второму вызову функции). Как мне переписать его наиболее питоническим / каноническим способом?

Кроме того, что я могу сделать, чтобы избежать ошибок такого рода, помимо получения большего опыта? (Откровенно говоря, мне не нравится эта языковая функция, поскольку ошибки такого типа легко сделать и их трудно отловить.)

5
задан Community 23 May 2017 в 11:51
поделиться