formatting list -> comma separated (slightly different)
Larry Bates
larry.bates at websafe.com`
Wed Jul 9 17:02:42 EDT 2008
Michiel Overtoom wrote:
> Paul & Robert wrote...
>
>> d = ["soep", "reeds", "ook"]
>> print ', '.join(d)
>> soep, reeds, ook
>
> I occasionally have a need for printing lists of items too, but in the form:
> "Butter, Cheese, Nuts and Bolts". The last separator is the word 'and'
> instead of the comma. The clearest I could come up with in Python is below.
> I wonder if there is a more pythonic solution for this problem. Maybe
> something recursive?
>
> Greetings,
>
>
> '''
> Formatting a sequence of items such that they are separated by
> commas, except the last item, which is separated by the word 'and'.
>
> Used for making lists of dates and items more human-readable
> in generated emails and webpages.
>
> For example:
>
> Four friends have a dinner: Anne, Bob, Chris and Debbie
> Three friends have a dinner: Anne, Bob and Chris
> Two friends have a dinner: Anne and Bob
> One friend has a dinner: Anne
> No friend has a dinner:
>
> ['Anne','Bob','Chris','Debbie'] -> "Anne, Bob, Chris and Debbie"
> ['Bob','Chris','Debbie'] -> "Bob, Chris and Debbie"
> ['Chris','Debbie'] -> "Chris and Debbie"
> ['Debbie'] -> "Debbie"
> [] -> ""
>
> '''
>
> def pretty(f):
> if len(f)==0: return ''
> if len(f)==1: return f[0]
> sepwithcommas=f[:-1]
> sepwithand=f[-1]
> s=', '.join(sepwithcommas)
> if sepwithand:
> s+=' and '+sepwithand
> return s
>
> friends=['Anne','Bob','Chris','Debbie','Eve','Fred']
> while True:
> print friends,'->',pretty(friends)
> if friends:
> friends.pop(0)
> else:
> break
>
>
>
>
>
IMHO slightly easier to read and faster if the lists are long:
def pretty(f):
if len(f) == 0 :
return ""
elif len(f) == 1:
return f[0]
else:
return ', '.join(f[:-1]) + ' and ' + f[-1]
-Larry
More information about the Python-list
mailing list