I won't say much besides what's here. My `return` statement is quite a headfull.

    """Hopefully this function will save you the trip to oocalc/excel.
    
    """
    
    def rangeth(start, stop=None, skip=1):
        """rangeth([start,] stop[, skip])
    
    returns a list of strings as places in a list (1st, 2nd, etc)
    
    >>> rangeth(4)
    ['0th', '1st', '2nd', '3rd']
    
        """
        
        if stop is None:
            stop, start = start, 0
    
        places = {'1':'st', '2':'nd', '3':'rd'}
        
        return ["{}{}".format(i, places.get(i[-1], 'th')) \
                if i[-2:] not in ['11', '12', '13'] else "{}{}".format(i, 'th') \
                for i in map(str, range(start, stop, skip))]

Also, can someone explain to me how `range` accepts it's parameters? I have my ugly little boilerplate here that I wish didn't exist. I can't find the source for range, as I gave up after thinking it's probably some header file in `include`.

EDIT: I found the [source code](http://stackoverflow.com/questions/6644537/how-does-the-python-range-function-have-a-default-parameter-before-the-actual-on) for `range` in a question on SO. Thanks for the answers so far!