Seite 1 von 1

.format mit Elemente aus Liste

Verfasst: Montag 8. Juli 2019, 07:51
von Hartmannsgruber
Servus liebes Forum,

ich hätte mal wieder eine wahrscheinlich banale Frage.
Ich möchte mit eine Liste ausgeben lassen, welche mit .format formatiert wird.

Code: Alles auswählen

meine_liste = ["a", "b", "c"]

print("{0} | {1} | {3}".format(meine_liste))

>>>IndexError: tuple index out of range
Die Fehlermeldung ist ja eindeutig, aber warum?
Die Liste enthält drei Werte und in der print() - Anweisung werden drei Platzhalter vergeben.

Gehe ich aber nun her und schreibe probehalber:

Code: Alles auswählen

print("{0} | {1} | {2}".format("a", "b", "c"))
>>> a | b | c
funktioniert alles wunderbar.
Wie kann ich also nun eine Liste mit .format korrekt ausgeben lassen?
Ich habe bereits 2,5 std. mit der suche im Internet verbracht.
Entweder komme ich nicht drauf, bin zu blöd, oder finde einfach die falschen Seiten.

LG
Hartmannsgruber

Re: .format mit Elemente aus Liste

Verfasst: Montag 8. Juli 2019, 08:27
von snafu
Bei format() musst du die Argumente einzeln übergeben. Die Liste wird also nicht automatisch auseinander gefriemelt, sondern dafür musst du beim Aufruf selbst sorgen. Besser wäre es hier aber ohnehin join() zu nutzen.

Re: .format mit Elemente aus Liste

Verfasst: Montag 8. Juli 2019, 08:30
von Jankie
Hey, ich würde das mit join() machen.

Code: Alles auswählen

meine_liste = ["a", "b", "c"]



print(" ".join(meine_liste))
#edit: da war wohl schon jemand schneller als ich :oops:

Re: .format mit Elemente aus Liste

Verfasst: Montag 8. Juli 2019, 08:32
von snafu
Oder in dem Fall halt ' | '. join(meine_liste)

Re: .format mit Elemente aus Liste

Verfasst: Montag 8. Juli 2019, 08:42
von Jankie

Code: Alles auswählen

meine_liste = ["a", "b", "c"]

print("{0} | {1} | {2}".format(*meine_liste))



geht auch. Weiß aber nicht ob das so benutzt wird.

Re: .format mit Elemente aus Liste

Verfasst: Montag 8. Juli 2019, 08:52
von sparrow
@Hartmannsgruber:
Alles was hier geschrieben wurde solltest du beherzigen. Insbesondere "join".
Um deine Frage zu beantworten, die im ersten Post auch mitschwingt: die Zahl zwischen den geschweiften Klammern gibt den Index an. Wenn du 3 Elemente übergibst aber mit {3} auf das 4. zugreifst (wir erinnern uns, das Zählen beginnt mit Index 0 für das 1. Element), dann ist da halt nichts. Und dann kommt es zu der entsprechenden Fehlermeldung.

Re: .format mit Elemente aus Liste

Verfasst: Montag 8. Juli 2019, 11:41
von __blackjack__
@sparrow: Die Antwort ist ein bisschen irreführend, denn ob da nun 3, 2, oder 1 steht ist egal wenn man nur *ein* Argument übergibt. Die 3 wäre auch dann falsch wenn die Liste 10 Elemente enthalten würde, weil das ja nicht der Index in die Liste, sondern in die Argumente ist.

@Hartmannsgruber: Noch eine Variante:

Code: Alles auswählen

In [104]: meine_liste = ['a', 'b', 'c']

In [105]: print('{0[0]} | {0[1]} | {0[2]}'.format(meine_liste))
a | b | c

Re: .format mit Elemente aus Liste

Verfasst: Donnerstag 18. Juli 2019, 12:20
von Hartmannsgruber
vielen Dank für die Antworten.
Die split - Funktion hatte ich auch schon im Kopf hat aber in meinen Fall nicht ganz funktioniert.

@_blackjack_
auf diese Lösung bin ich noch gar nicht gekommen, bzw. das habe ich auch noch nicht in meinen Büchern gesehen, #
dass hier eine Liste genommen wird und die einzelnen Indizes verwendet werden.
Mit deiner Antwort konnte ich mein Problem lösen!

Re: .format mit Elemente aus Liste

Verfasst: Donnerstag 18. Juli 2019, 12:25
von __blackjack__
@Hartmannsgruber: Wobei bei diesem Beispiel die Lösung von Snafu mit dem `join()` einfacher und allgemeiner ist.

Re: .format mit Elemente aus Liste

Verfasst: Donnerstag 18. Juli 2019, 12:57
von snafu
Hängt halt auch davon ab ob die tatsächlich vorliegenden Daten bereits Strings sind. Falls nicht, dann klappt die direkte Anwendung von join() leider nicht und man muss für die Umwandlungen in Zeichenketten einen kleinen Umweg gehen, z.B. mittels map().