Ich mag es sehr, wenn eine ganz neue Python-Konvention Dinge mit .format()
druckt.
Kann man damit ein Element zeilenweise drucken? Die Annahme der Anzahl der Elemente ist nicht bekannt.
Arbeitsbeispiel wird geschätzt.
Sie können den Zeichenfolgenformatierer für jede Art von Zeichenfolge verwenden, einschließlich mehrzeiliger Zeichenfolgen. Wenn Sie also eine Formatzeichenfolge '{}\n{}\n{}'
hätten, könnten Sie ihr drei Elemente übergeben, die alle in separaten Zeilen stehen.
Bei einer dynamischen Anzahl von Elementen, die Sie drucken möchten, müssen Sie lediglich sicherstellen, dass die Formatzeichenfolge auch die gleiche Anzahl von Formatelementen enthält. Eine Möglichkeit, dies zu lösen, besteht darin, die Formatzeichenfolge dynamisch zu konstruieren. Zum Beispiel das:
'\n'.join('{}' for _ in range(len(myList))).format(*myList)
Sie erstellen also im Wesentlichen zuerst eine Formatzeichenfolge, indem Sie von einem Generator ein Formatelement {}
pro Element in myList
erstellen lassen und diese mit einem Zeilenvorschub verbinden. Die resultierende Zeichenfolge sieht also ungefähr so aus: {}\n{}\n…\n{}\n{}
.
Anschließend verwenden Sie diese Zeichenfolge als Formatzeichenfolge und rufen sie mit format
auf, wobei Sie die entpackte Liste als Argumente übergeben. Sie füllen also alle Stellen der Formatzeichenfolge korrekt aus.
Also, du kannst machst es. Dies ist jedoch keine wirklich praktische Idee. Es sieht ziemlich verwirrend aus und vermittelt Ihre Absicht nicht gut. Ein besserer Weg wäre, jedes Element Ihrer Liste separat zu behandeln und es separat zu formatieren und nur dann zusammenzufügen:
'\n'.join('{}'.format(item) for item in myList)
Wenn Sie Elemente nur zeilenweise drucken möchten, müssen Sie natürlich keine lange Zeichenfolge mit Zeilenumbrüchen erstellen, sondern die Elemente in einer Schleife einzeln drucken:
for item in myList:
print(item)
# or use string formatting for the item here
print('{}'.format(item))
Und natürlich, wie thefourtheye angedeutet hat, können Sie, wenn jede Schleifeniteration sehr einfach ist, auch die gesamte Liste an die Druckfunktion übergeben und sep='\n'
einstellen, um die Elemente jeweils in separaten Zeilen zu drucken.
Wenn Sie Python 3.x verwenden und nur die Liste der Elemente in jeder Zeile drucken möchten, können Sie print
wie folgt verwenden
my_list = [1, 2, 3, 4]
print(*my_list, sep="\n")
*my_list
entpackt einfach die Listenelemente und übergibt sie als Parameter an die Funktion print
(Ja, print
ist eine Funktion in Python 3.x).
Ausgabe
1
2
3
4
Wenn Sie Python 2.x verwenden, können Sie die Druckfunktion einfach wie folgt aus der Zukunft importieren
from __future__ import print_function
Hinweis: Dieser Import sollte die erste Zeile in der Datei sein.
Halte es einfach
>>> myList = [2,3,5,6,5,4,3,2]
>>> for elem in myList:
'{}'.format(elem)
gibt
'2'
'3'
'5'
'6'
'5'
'4'
'3'
'2'
Ist es das, was Sie erhalten möchten?
Du meinst wie print('\n'.join(a_list))
? Die Formatierung von Zeichenfolgen könnte möglicherweise etwas Ähnliches wie '\n'.join(a_list)
bewirken, scheint hier jedoch nicht erforderlich zu sein. (siehe Update)
Die Sache ist, dass .format
überhaupt keine Dinge druckt. Dafür ist print
da. format
nimmt einige Daten und gibt eine Zeichenfolge zurück. print
ist eine Möglichkeit, diese Zeichenfolge an die Terminal-/Standardausgabe auszugeben, aber print
und .format
haben keine wirkliche Beziehung.
Ich nehme das zurück, was ich über das Formatieren von Strings gesagt habe, um dies zu tun. Das Formatmuster selbst definiert die arity der format
-Methode, sodass Sie format
nicht verwenden können, ohne das Formatmuster dynamisch zu erstellen.
Eine andere Möglichkeit ist die Verwendung der String-Multiplikation:
list = [1, 2, 3, 4, 5]
print( ( '{}\n' * len(list) ).format( *list ) )
Für normales Drucken würde ich die Option sep des Befehls print verwenden. Die Formatierungsmethode ist nützlicher, wenn Sie die Python-Protokollierungsfunktionen verwenden (die nicht über das Argument sep verfügen).
Wir können join
verwenden, um zeilenweise zu drucken:
>>> x = ['a','b','c']
>>> print("\n".join(x))
a
b
c