I have created this function to parse the list:
listy = [\'item1\', \'item2\',\'item3\',\'item4\',\'item5\', \'item6\']
def coma(abc):
for i in abc[0:-
In python, many functions, that work with lists also works with iterators (like join
, sum
, list
). To get the last item of a iterable is not that easy, because you cannot get the length, because it may be unknown in advance.
def coma_iter(iterable):
sep = ''
last = None
for next in iterable:
if last is not None:
yield sep
yield last
sep = ', '
last = next
if sep:
yield ', and '
if last is not None:
yield last
print ''.join(coma_iter(listy))
When there are 1+ items in the list (if not, just use the first element):
>>> "{} and {}".format(", ".join(listy[:-1]), listy[-1])
'item1, item2, item3, item4, item5, and item6'
Edit: If you need an Oxford comma (didn't know it even existed!) -- just use: ", and"
isntead.
It's generally bad practice to use +
when combining strings, as it is generally slow. Instead, you can use
def comma(items):
return "{}, and {}".format(", ".join(items[:-1]), items[-1])
You should note, however, that this will break if you only have one item:
>>> comma(["spam"])
', and spam'
To solve that, you can either test the length of the list (if len(items) >= 2:
), or do this, which (imho) is slightly more pythonic:
def comma(items):
start, last = items[:-1], items[-1]
if start:
return "{}, and {}".format(", ".join(start), last)
else:
return last
As we saw above, a single item list will result in an empty value for items[:-1]
. if last:
is just a pythonic way of checking if last
is empty.
def oxford_comma_join(l):
if not l:
return ""
elif len(l) == 1:
return l[0]
else:
return ', '.join(l[:-1]) + ", and " + l[-1]
print(oxford_comma_join(['item1', 'item2', 'item3', 'item4', 'item5', 'item6']))
Output:
item1, item2, item3, item4, item5, and item6
Also as an aside the Pythonic way to write
for i in abc[0:-1]:
is
for i in abc[:-1]:
You can also try the quoter
library
>>> import quoter
>>> mylist = ['a', 'b', 'c']
>>> quoter.and_join(mylist)
'a, b, and c'
>>> quoter.or_join(mylist)
'a, b, or c'
https://pypi.python.org/pypi/quoter
def coma(lst):
return '{} and {}'.format(', '.join(lst[:-1]), lst[-1])