.format mit Elemente aus Liste

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

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
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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:
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Oder in dem Fall halt ' | '. join(meine_liste)
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

@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.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

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!
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hartmannsgruber: Wobei bei diesem Beispiel die Lösung von Snafu mit dem `join()` einfacher und allgemeiner ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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