143 votes

Méthode pythonique pour imprimer les éléments d'une liste

J'aimerais savoir s'il existe une meilleure façon d'imprimer tous les objets d'une liste Python que celle-ci :

myList = [Person("Foo"), Person("Bar")]
print("\n".join(map(str, myList)))
Foo
Bar

J'ai lu que cette façon n'est pas vraiment bonne :

myList = [Person("Foo"), Person("Bar")]
for p in myList:
    print(p)

N'y a-t-il pas quelque chose comme :

print(p) for p in myList

Si non, ma question est... pourquoi ? Si l'on peut faire ce genre de choses avec des listes complètes, pourquoi pas une simple déclaration en dehors d'une liste ?

280voto

Andrew Clark Points 77748

En supposant que vous utilisez Python 3.x :

print(*myList, sep='\n')

Vous pouvez obtenir le même comportement sur Python 2.x en utilisant from __future__ import print_function comme l'a noté mgilson dans les commentaires.

Avec l'instruction print de Python 2.x, vous aurez besoin d'une certaine forme d'itération. print(p) for p in myList ne fonctionne pas, vous pouvez simplement utiliser ce qui suit qui fait la même chose et est toujours sur une seule ligne :

for p in myList: print p

Pour une solution qui utilise '\n'.join() je préfère les compréhensions de liste et les générateurs à map() donc j'utiliserais probablement ce qui suit :

print '\n'.join(str(p) for p in myList)

30voto

georgesl Points 4116

Je l'utilise tout le temps :

#!/usr/bin/python

l = [1,2,3,7] 
print "".join([str(x) for x in l])

8voto

ytpillai Points 2124

[print(a) for a in list] donnera un tas de types None à la fin bien qu'il imprime tous les éléments

3voto

gukoff Points 824

Pour Python 2.* :

Si vous surchargez la fonction __str__() pour votre classe Personne, vous pouvez omettre la partie avec map(str, ...). Une autre façon de procéder consiste à créer une fonction, comme vous l'avez écrit :

def write_list(lst):
    for item in lst:
        print str(item) 

...

write_list(MyList)

Il existe dans Python 3.* l'argument sep pour la fonction print(). Jetez un coup d'œil à la documentation.

3voto

Floris Points 31305

Développer la réponse de @lucasg (inspirée par le commentaire qu'elle a reçu) :

Pour obtenir un formaté vous pouvez faire quelque chose de ce genre :

l = [1,2,5]
print ", ".join('%02d'%x for x in l)

01, 02, 05

Maintenant, le ", " fournit le séparateur (uniquement entre les éléments, pas à la fin) et la chaîne de formatage. '02d' combiné avec %x donne une chaîne formatée pour chaque élément x - dans ce cas, formaté comme un nombre entier à deux chiffres, rempli de zéros à gauche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X