python/nondist/sandbox/statistics statistics.py, 1.4, 1.5
Update of /cvsroot/python/python/nondist/sandbox/statistics In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6746 Modified Files: statistics.py Log Message: Simplify the select() function. Index: statistics.py =================================================================== RCS file: /cvsroot/python/python/nondist/sandbox/statistics/statistics.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** statistics.py 15 Feb 2004 08:25:20 -0000 1.4 --- statistics.py 17 Feb 2004 12:17:41 -0000 1.5 *************** *** 86,126 **** return (s / k) ** 0.5 # population standard deviation - def _partition(iterable): - """ Private function supporting select() - - Chooses the first element as pivot and returns tuple with a - list of values less than the pivot, the pivot itself, and a - a list of values not less than the pivot. - """ - - under, notunder = [], [] - ua, nua = under.append, notunder.append - it = iter(iterable) - pivot = it.next() # must have at least one element - for elem in it: - if elem < pivot: - ua(elem) - else: - nua(elem) - return under, pivot, notunder - def select(data, n): ! """Find the nth rank ordered element (the least value has rank 0).""" try: ! size = len(data) ! except TypeError: ! data = tuple(data) ! size = len(data) ! if size <= n: raise ValueError('not enough elements for the given rank') - while True: - p, pivot, q = _partition(data) - if n < len(p): - data = p - elif n == len(p): - return pivot - else: - data = q - n -= len(p) + 1 def median(data): --- 86,112 ---- return (s / k) ** 0.5 # population standard deviation def select(data, n): ! """Find the nth rank ordered element (the least value has rank 0). ! """ try: ! while True: ! under, notunder = [], [] ! ua, nua = under.append, notunder.append ! it = iter(data) ! pivot = it.next() ! for elem in it: ! if elem < pivot: ! ua(elem) ! else: ! nua(elem) ! if n < len(under): ! data = under ! elif n == len(under): ! return pivot ! else: ! data = notunder ! n -= len(under) + 1 ! except StopIteration: raise ValueError('not enough elements for the given rank') def median(data):
participants (1)
-
rhettinger@users.sourceforge.net