Comma Code (project from "Automate the Boring Stuff with Python")
Ludisposed's answer is already a great improvement, however it fails to take into account some cornercases:


It only works with lists of strings.
For lists of length 1, like ["foo"], it returns " and foo" (your code has the same problem).
It raises an IndexError on an empty list.


This code avoids these problems:

def list_to_string(a_list):
    if not a_list:
        return ""
    elif len(a_list) == 1:
        return str(a_list[0])
    else:
        body = ", ".join(map(str, a_list[:-1]))
        return '{0} and {1}'.format(body, a_list[-1])


This does not currently have the Oxford comma, like your code. But you can easily add it as another special case (don't add it when len(a_list) == 2 and add it otherwise). Thanks to @DavidK for pointing this out in the comments.