J'aimerais savoir s'il existe un meilleur moyen d'imprimer tous les objets d'une liste Python que ceci:
myList = [Person("Foo"), Person("Bar")]
print("\n".join(map(str, myList)))
Foo
Bar
Je lis de cette façon n'est pas vraiment bon:
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 nous pouvons faire ce genre de choses avec des listes complètes, pourquoi ne pas en faire une simple déclaration en dehors d’une liste?
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 indiqué par mgilson dans les commentaires.
Avec l'instruction print sur Python 2.x, vous aurez besoin d'une itération quelconque. Si votre question à propos de print(p) for p in myList
ne fonctionne pas, vous pouvez simplement utiliser ce qui suit qui fait la même chose et n'a toujours qu'une 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 que map()
. J'utiliserais donc probablement les éléments suivants:
print '\n'.join(str(p) for p in myList)
Je l'utilise tout le temps :
#!/usr/bin/python
l = [1,2,3,7]
print "".join([str(x) for x in l])
[print(a) for a in list]
donnera un tas de types None à la fin bien qu’il affiche tous les éléments
Pour Python 2. *:
Si vous surchargez la fonction __str __ () pour votre classe Person, vous pouvez omettre la pièce avec map (str, ...). Une autre façon de faire est de créer une fonction, comme vous l'avez écrit:
def write_list(lst):
for item in lst:
print str(item)
...
write_list(MyList)
Il y a dans Python 3. * l'argument sep pour la fonction print (). Regardez la documentation.
Développer la réponse de @ lucasg (inspirée par le commentaire reçu):
Pour obtenir une sortie de listeformatéelist, vous pouvez faire quelque chose dans le sens suivant:
l = [1,2,5]
print ", ".join('%02d'%x for x in l)
01, 02, 05
Désormais, le ", "
fournit le séparateur (uniquement entre les éléments, pas à la fin) et la chaîne de formatage '02d'
combinée avec %x
donne une chaîne formatée pour chaque élément x
- dans ce cas, formaté sous la forme d'un entier à deux chiffres, rempli à gauche de zéros.
Pour afficher chaque contenu, j'utilise:
mylist = ['foo', 'bar']
indexval = 0
for i in range(len(mylist)):
print(mylist[indexval])
indexval += 1
Exemple d'utilisation dans une fonction:
def showAll(listname, startat):
indexval = startat
try:
for i in range(len(mylist)):
print(mylist[indexval])
indexval = indexval + 1
except IndexError:
print('That index value you gave is out of range.')
J'espère que j'ai aidé.
Je pense que c'est le plus pratique si vous voulez juste voir le contenu de la liste:
myList = ['foo', 'bar']
print('myList is %s' % str(myList))
Simple, facile à lire et peut être utilisé avec une chaîne de formatage.
La question de l'OP est la suivante: fait quelque chose comme suit existe, sinon pourquoi
print(p) for p in myList # doesn't work, OP's intuition
la réponse est, il existe qui est:
[p for p in myList] #works perfectly
Fondamentalement, utilisez []
pour comprendre la liste et supprimez print
pour éviter d’imprimer None
. Pour voir pourquoi print
imprime None
voir this
J'ai récemment créé un générateur de mot de passe et bien que je sois TRÈS NOUVEAU en python, je l'ai ajouté pour afficher tous les éléments d'une liste (avec de petites modifications pour répondre à vos besoins ...
x = 0
up = 0
passwordText = ""
password = []
userInput = int(input("Enter how many characters you want your password to be: "))
print("\n\n\n") # spacing
while x <= (userInput - 1): #loops as many times as the user inputs above
password.extend([choice(groups.characters)]) #adds random character from groups file that has all lower/uppercase letters and all numbers
x = x+1 #adds 1 to x w/o using x ++1 as I get many errors w/ that
passwordText = passwordText + password[up]
up = up+1 # same as x increase
print(passwordText)
Comme je le disais, je suis très novice avec Python et je suis sûr que c’est trop maladroit pour un expert, mais je suis juste ici pour un autre exemple.
En supposant que votre liste soit imprimée [1,2,3], un moyen simple de procéder en Python3 consiste à:
mylist=[1,2,3,'lorem','ipsum','dolor','sit','amet']
print(f"There are {len(mylist):d} items in this lorem list: {str(mylist):s}")
En cours d'exécution, cela produit le résultat suivant:
Cette liste de lorem comprend 8 éléments: [1, 2, 3, 'lorem', 'ipsum', 'dolor', 'sit', 'amet']