My disgusting list comprehension in the return
statement is quite a headful.
"""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
.
yield
(stackoverflow.com/questions/231767/…) would allow using loops which would most likely make this code much more readable (but maybe not as efficient, I don't know). \$\endgroup\$version <= 2.6
due to the.format()
function. Also, your link to the doc, though appreciated, isn't what I was after. If you look at the calltip in IDLE for range, there are no default values given. My function postsrangeth(start, stop=None...
, which I don't like. \$\endgroup\$inflect
pypi.python.org/pypi/inflect/0.2.1 It has an ordinal-function which may be an alternate solution! ;-) \$\endgroup\$