# Search a sequence for its minimum and stop as soon as the lowest possible value is found

Peter Otten __peter__ at web.de
Fri Jan 6 09:04:02 EST 2017

```Example: you are looking for the minimum absolute value in a series of
integers. As soon as you encounter the first 0 it's unnecessary extra work
to check the remaining values, but the builtin min() will continue.

The solution is a minimum function that allows the user to specify a stop
value:

>>> from itertools import count, chain
>>> stopmin(chain(reversed(range(10)), count()), key=abs, stop=0)
0

How would you implement stopmin()?

Currently I raise an exception in the key function:

class Stop(Exception):
pass

def stopmin(items, key, stop):
"""
>>> def g():
...     for i in reversed(range(10)):
...         print(10*i)
...         yield str(i)
>>> stopmin(g(), key=int, stop=5)
90
80
70
60
50
'5'
"""
def key2(value):
result = key(value)
if result <= stop:
raise Stop(value)
return result
try:
return min(items, key=key2)
except Stop as stop:
return stop.args[0]

```