Automatiser les trucs ennuyeux avec Python: par des Virgules Code

Actuellement en train de travailler mon chemin à travers les débutants ce livre et qui ont terminé l'un des projets les par des Virgules Code " qui demande à l'utilisateur de construire un programme qui:

prend une valeur de la liste en argument et renvoie
une chaîne avec tous les éléments séparés par une virgule et un espace, et avec
inséré, avant le dernier élément. Par exemple, le passage de la ci-dessous liste des spams à
la fonction serait de retour " des pommes, des bananes, du tofu, et des chats. Mais votre fonction
doit être capable de travailler avec n'importe quel valeur de la liste passée.

spam = ['apples', 'bananas', 'tofu', 'cats']

Ma solution pour le problème (Qui fonctionne parfaitement bien):

spam= ['apples', 'bananas', 'tofu', 'cats']
def list_thing(list):
    new_string = ''
    for i in list:
        new_string = new_string + str(i)
        if list.index(i) == (len(list)-2):
            new_string = new_string + ', and '
        elif list.index(i) == (len(list)-1):
            new_string = new_string
        else:
            new_string = new_string + ', '
    return new_string

print (list_thing(spam))

Ma seule question, est il possible que je peux raccourcir mon code? ou de le rendre plus "pythonic'?

Voici mon code.

def listTostring(someList):
    a = ''
    for i in range(len(someList)-1):
        a += str(someList[i])
    a += str('and ' + someList[len(someList)-1])
    print (a)

spam = ['apples', 'bananas', 'tofu', 'cats']
listTostring(spam)

sortie: des pommes, des bananes, du tofu, et les chats

  • si vous avez le code du travail alors c'est plus adapté pour les codereview.stackexchange.com si vous souhaitez qu'il a passé en revue
  • Notez que votre code ne fonctionne pas de la dernière chaîne de la liste est une répétition de tout premiers éléments.
  • Désolé, ne se reproduira pas et merci pour l'astuce.
  • Ne savais même pas qu', merci de me le faire savoir!
  • Remarque l'exemple de sortie utilise le Oxford comma: 'apples, bananas, tofu, and cats', donc il y a une virgule après tofu. Qui rend le problème un peu délicat...