import math

def ListHistogram( L, nbins, minmax=None, normalize=None ):
    """Compute histogram of a list.
    Does not use Numeric or numarray.

    H[i] is the number of elements from L
    such that bins[i] <= L[i] < bins[i+1]
    """
    n = len(L)
    if minmax is None:
        xmin = min(L)
        xmax = max(L)
    else:
        xmin, xmax = minmax
        # clip data
        for i in range(n):
            if L[i] < xmin:
                L[i] = xmin
            if L[i] > xmax:
                L[i] = xmax
    bin_width = (xmax-xmin)/float(nbins-1)
    H = [0]*nbins
    for i in range(n):
        idx = int(math.floor( (L[i] - xmin)/bin_width ))
        H[idx] += 1
    bins = []
    for i in range(nbins):
        bins.append(xmin + bin_width*i)
    return bins, H
