web-dev-qa-db-fra.com

Manière pythonique d'imprimer des éléments de liste

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?

87
Guillaume Voiron

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) 
178
Andrew Clark

Je l'utilise tout le temps : 

#!/usr/bin/python

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

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

5
ytpillai

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.

3
gukoff

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.

3
Floris

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é.

2
ShinyMemes

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.

1
Rongzhao Zhang

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

1
Gaurav Singhal

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.

1
Nate Baker

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']

0
Aethalides