Welcome, guest | Sign In | My Account | Store | Cart
```import math
import functools

def percentile(N, percent, key=lambda x:x):
"""
Find the percentile of a list of values.

@parameter N - is a list of values. Note N MUST BE already sorted.
@parameter percent - a float value from 0.0 to 1.0.
@parameter key - optional key function to compute value from each element of N.

@return - the percentile of the values
"""
if not N:
return None
k = (len(N)-1) * percent
f = math.floor(k)
c = math.ceil(k)
if f == c:
return key(N[int(k)])
d0 = key(N[int(f)]) * (c-k)
d1 = key(N[int(c)]) * (k-f)
return d0+d1

# median is 50th percentile.
median = functools.partial(percentile, percent=0.5)
```

Diff to Previous Revision

```--- revision 1 2007-04-17 08:47:01
+++ revision 2 2011-04-25 03:41:08
@@ -18,8 +18,8 @@
c = math.ceil(k)
if f == c:
return key(N[int(k)])
-    d0 = key(N[int(f)]) * (k-f)
-    d1 = key(N[int(c)]) * (c-k)
+    d0 = key(N[int(f)]) * (c-k)
+    d1 = key(N[int(c)]) * (k-f)
return d0+d1

# median is 50th percentile.
```