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]


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /