it-swarm.com.de

listenelemente zeilenweise drucken - ist es mit Format möglich

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.

8
andilabs

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.

6
poke

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.

12
thefourtheye

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?

1
octoback

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.

Aktualisieren:

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.

1
kojiro

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

0
kamyonet

Wir können join verwenden, um zeilenweise zu drucken:

>>> x = ['a','b','c']
>>> print("\n".join(x))
a
b
c
0
Adarsh Pawar