Oh... I made a mistake in my off-the-cuff code.  The items.append()
shouldn't be in an else, but just in the loop.

def median(it, on_nan=DEFAULT):
if on_nan == 'unsafe':
    ... do all the current stuff ...
elif on_nan == "ignore":
    return median((x for x in it if not is_nan(x)), on_nan='unsafe')
elif on_nan = "ieee_total_order":
    return median(sorted(it, key=total_order), on_nan='unsafe')
     else:
items = []
for x in it:
    if is_nan(x):
        if on_nan == 'raise':
            raise ValueError('No median exists of collections with NaNs')
        elif on_nan == 'poison':
            return float('nan')
    items.append(x)
return median(items, on_nan='unsafe')

It needs a total_order() support function and an is_nan() support function,
but other than that, I think this is complete code.  Probably it would be
faster if it moved the raise/poison conditions outside the loop, and looped
inside each of them.  But this way is slightly fewer lines and conceptually
more obvious, I think.

-- 
Keeping medicines from the bloodstreams of the sick; food
from the bellies of the hungry; books from the hands of the
uneducated; technology from the underdeveloped; and putting
advocates of freedom in prisons.  Intellectual property is
to the 21st century what the slave trade was to the 16th.
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/LUDK5X55SVV5NIEC5W7BGSLSUZKBY7U5/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to