On Mon, 27 Mar 2006 07:50:01 -0800, Arne Ludwig wrote: > Just for completeness: The functions in Steve's original post named > maximum calculate the minimum.
Er, yes. I benchmarked them but clearly I should have function-tested them as well. Here is, I hope, my last word on maximum(). It figures out whether it got an iterator or a list, and does the right thing. I believe it will compile and run correctly whether your version of Python has iterators or not. And, it doesn't compute the minimum. def maximum(cmp, seq): """ Return maximum value of seq, as chosen by provided cmp() function. If seq contains multiple maximal values, return the last one. Arguments: cmp -- function reference; function should return values with the same semantics as Python's cmp() function. seq -- any sequence (a list or an iterator). If seq is empty, this function will raise ValueError. """ # is it a list? if hasattr(seq, "__getitem__"): if len(seq) == 0: raise ValueError, "seq must contain at least 1 element" maxval = seq[0] for v in seq: if cmp(maxval, v) <= 0: maxval = v return maxval # is it an iterator? if hasattr(seq, "__iter__") and hasattr(seq, "next"): try: maxval = seq.next() except StopIteration: raise ValueError, "seq must contain at least 1 element" for v in seq: if cmp(maxval, v) <= 0: maxval = v return maxval raise TypeError, "seq must be a list or an iterator" -- Steve R. Hastings "Vita est" [EMAIL PROTECTED] http://www.blarg.net/~steveha -- http://mail.python.org/mailman/listinfo/python-list