web-dev-qa-db-fra.com

imprimer les éléments de la liste ligne par ligne - est-il possible d'utiliser le format

J'aime beaucoup la nouvelle convention Python pour imprimer des choses avec .format()

Est-il possible de l'utiliser pour imprimer des éléments ligne par ligne? Bien entendu, le nombre d'éléments est inconnu.

Exemple de travail sera apprécié.

8
andilabs

Vous pouvez utiliser le formateur de chaîne sur n'importe quel type de chaîne, y compris une chaîne multiligne. Donc, bien sûr, si vous avez une chaîne de format '{}\n{}\n{}', vous pouvez lui passer trois éléments, qui seront tous placés sur des lignes séparées.

Donc, avec un nombre dynamique d’éléments que vous souhaitez imprimer, il vous suffit de vous assurer que la chaîne de formatage contient également le même nombre d’éléments de formatage. Une façon de résoudre ce problème consiste à construire la chaîne de format de manière dynamique. Par exemple ceci:

'\n'.join('{}' for _ in range(len(myList))).format(*myList)

Donc, vous créez essentiellement une chaîne de format en premier, en demandant à un générateur de générer un élément de format {} par élément dans myList, et de les joindre à l’aide d’un caractère de nouvelle ligne. Ainsi, la chaîne résultante ressemble à ceci: {}\n{}\n…\n{}\n{}.

Ensuite, vous utilisez cette chaîne en tant que chaîne de format et appelez format dessus, en lui passant la liste décompressée en tant qu'arguments. Donc, vous remplissez correctement tous les points de la chaîne de format.

Alors, vous pouvez le faire. Cependant, ce n'est pas vraiment une idée pratique. Cela semble plutôt déroutant et ne traduit pas bien votre intention. Un meilleur moyen serait de traiter chaque élément de votre liste séparément et de le formater séparément, et seulement alors / les associer:

'\n'.join('{}'.format(item) for item in myList)

Pour imprimer uniquement des éléments ligne par ligne, bien sûr, le moyen le plus évident de ne pas créer de chaîne longue avec des sauts de ligne serait de passer en boucle sur les éléments et de les imprimer un par un:

for item in myList:
    print(item)

    # or use string formatting for the item here
    print('{}'.format(item))

Et bien sûr, comme l’a suggéré le président, si chaque itération de boucle est très simple, vous pouvez également transmettre la liste complète à la fonction d’impression et définir sep='\n' pour imprimer les éléments sur des lignes distinctes.

6
poke

Si vous utilisez Python 3.x et que vous souhaitez uniquement imprimer la liste des éléments, un dans chaque ligne, vous pouvez utiliser print function elle-même, comme ceci

my_list = [1, 2, 3, 4]
print(*my_list, sep="\n")

*my_list décompresse simplement les éléments de la liste et passe chacun d’eux en tant que paramètres à la fonction print (Oui, print est une fonction de Python 3.x).

Sortie

1
2
3
4

Si vous utilisez Python 2.x, vous pouvez simplement importer la fonction d'impression du futur comme ceci

from __future__ import print_function

Remarque: Cette importation doit être la première ligne du fichier.

12
thefourtheye

Rester simple

>>> myList = [2,3,5,6,5,4,3,2]

>>> for elem in myList:
    '{}'.format(elem)

donne

'2'
'3'
'5'
'6'
'5'
'4'
'3'
'2'

Est-ce ce que vous souhaitez obtenir?

1
octoback

Vous voulez dire comme print('\n'.join(a_list))? Le formatage de chaîne pourrait probablement faire quelque chose de similaire à '\n'.join(a_list), mais cela ne semble pas nécessaire ici. (voir mise à jour)

Le problème est que .format n'imprime rien du tout. C'est à cela que print est destiné. format prend des données et retourne une chaîne. print est un moyen de sortir cette chaîne sur le terminal/la sortie standard, mais print et .format n’ont pas vraiment de relation réelle.

Mettre à jour:

Je reprends ce que j'ai dit à propos du formatage de chaîne capable de le faire. Le modèle de format lui-même prédéfinit le arity de la méthode format. Si bien que vous ne créez pas le modèle de format de manière dynamique, vous ne pouvez pas utiliser format pour cela.

1
kojiro

Une autre façon de faire consiste à utiliser la multiplication de chaîne:

list = [1, 2, 3, 4, 5]
print( ( '{}\n' * len(list) ).format( *list ) )

Pour les anciennes impressions simples, j'utiliserais l'option sep de la commande print. La méthode format est plus utile si vous utilisez les fonctions de journalisation Python (qui ne possèdent pas l’argument sep).

0
kamyonet