Um zu erklären, warum die Liste nicht "richtig" gedruckt wird, werden print(["Sam"])Aufrufe repr("Sam"), die 'Sam'(mit Anführungszeichen) zurückgegeben werden, anders als beim Aufrufen print("Sam")und Python-Aufrufe, str("Sam")die zurückgegeben werden Sam(ohne Anführungszeichen). Weitere Informationen finden Sie unter Unterschied zwischen strundrepr oder Python strund lists .
Hierbei wird die map()Funktion verwendet, um str für jedes Element von mylist aufzurufen und eine neue Liste von Zeichenfolgen zu erstellen , die dann zu einer Zeichenfolge mit verbunden werden str.join(). Dann ersetzt der %Zeichenfolgenformatierungsoperator die Zeichenfolge in statt %sin "[%s]".
Danke, das funktioniert super. Können Sie in der zweiten Zeile etwas näher erläutern, was Sie tun? Ich bin neu in Python.
Obaid
19
Er verwendet die mapFunktion, strum jedes Element von aufzurufen mylistund eine neue Liste von Zeichenfolgen zu erstellen, mit denen er dann eine Zeichenfolge zusammenfügt str.join. Anschließend verwendet er den %Zeichenfolgenformatierungsoperator, um die Zeichenfolge anstelle von %sin zu ersetzen "[%s]".
li.davidm
6
Eine andere Möglichkeit, die vielleicht etwas moderner ist: "[{0}]".format(", ".join(str(i) for i in mylist))
Jack O'Connor
2
Ich bevorzuge map(f, xs)(oder imapin python2.x) (f(x) for x in xs), wenn fein vordefinierter Aufruf möglich ist. Das führt tendenziell weniger Bytecodes aus und ist normalerweise kompakter. Sicherlich ist das nichtmap(lambda x:..., xs) viel schlimmer als(... for x in xs)
SingleNegationElimination
1
@ user1767754: wirklich? Verknüpfung?
SingleNegationElimination
18
Dies ist einfacher Code. Wenn Sie neu sind, sollten Sie ihn leicht genug verstehen.
mylist =["x",3,"b"]for items in mylist:print(items)
Es druckt sie alle ohne Anführungszeichen, wie Sie wollten.
Das verwirrt mich. Filtert der lange Datentyp die Liste irgendwie?
dval
Eine prägnantere Version wäreprint(end='['); print(*l, sep=', ', end=']\n')
Anonymous
9
Anstatt zu verwenden map, würde ich empfehlen, einen Generatorausdruck joinzu verwenden, der einen Iterator akzeptieren kann:
def get_nice_string(list_or_iterator):return"["+", ".join( str(x)for x in list_or_iterator)+"]"
Hier joinist eine Member-Funktion der String-Klasse str. Es wird ein Argument benötigt: eine Liste (oder ein Iterator) von Zeichenfolgen, die dann eine neue Zeichenfolge mit allen in diesem Fall verketteten Elementen zurückgibt ,.
Eine gute Optimierung für Python 2, da map eine Liste in 2.x zurückgibt. Es gibt einen Generator in 3.x zurück, daher hilft es dort nicht so viel.
Tom Zych
7
Ich würde zurückkehren", ".join( str(x) for x in list_or_iterator).join('[]')
eyquem
@eyquem: Clever, ich habe noch nie gesehen, dass Join so verwendet wurde. Für Anfänger ist dies jedoch etwas undurchsichtiger (da Sie die Eigenschaft verwenden, dass eine Zeichenfolge ein iterierbarer Container mit Zeichenfolgen mit einem Zeichen ist).
Seth Johnson
6
Sie können alle unerwünschten Zeichen aus einer Zeichenfolge löschen, indem Sie die translate()Methode mit Nonefür das tableArgument verwenden, gefolgt von einer Zeichenfolge, die die Zeichen enthält, die für das deletecharsArgument entfernt werden sollen.
Wenn Sie eine Version von Python vor 2.6 verwenden, müssen Sie stattdessen stringdie translate()Funktion des Moduls verwenden, da die Möglichkeit, Noneals tableArgument zu übergeben, erst mit Python 2.6 hinzugefügt wurde. Die Verwendung sieht folgendermaßen aus:
@eyquem: Ja, um das Löschen von Zeichen zu vermeiden, die tatsächlich Teil Ihrer Daten sind (anstatt ausschließlich zur Abgrenzung verwendet zu werden), wäre natürlich eine etwas ausgefeiltere / andere Logik erforderlich, wenn dies möglich ist.
Martineau
3
Hier ist eine interaktive Sitzung, die einige der Schritte in @ TokenMacGuys Einzeiler zeigt. Zuerst verwendet er die mapFunktion, um jedes Element in der Liste in eine Zeichenfolge zu konvertieren (tatsächlich erstellt er eine neue Liste, nicht die Elemente in der alten Liste). Dann verwendet er die String-Methode join, um diese Strings mit ', 'ihnen zu kombinieren . Der Rest ist nur die Formatierung von Zeichenfolgen, was ziemlich einfach ist. (Bearbeiten: Diese Instanz ist unkompliziert. Die Formatierung von Zeichenfolgen kann im Allgemeinen etwas komplex sein.)
Beachten Sie, dass die Verwendung joineine einfache und effiziente Methode zum Erstellen einer Zeichenfolge aus mehreren Teilzeichenfolgen ist, die viel effizienter ist als das sukzessive Hinzufügen von Zeichenfolgen zu Zeichenfolgen, was viel Kopieren hinter den Kulissen erfordert.
>>> mylist =['x',3,'b']>>> m = map(str, mylist)>>> m
['x','3','b']>>> j =', '.join(m)>>> j
'x, 3, b'
Es wird nur die formatMethode verwendet. Keine Spur von str, und es ermöglicht die Feinabstimmung des Elementformats. Wenn Sie beispielsweise Gleitkommazahlen als Elemente der Liste haben, können Sie deren Format anpassen, indem Sie in diesem Fall einen Konvertierungsspezifizierer hinzufügen:.2f
print(["Sam"])
Aufruferepr("Sam")
, die'Sam'
(mit Anführungszeichen) zurückgegeben werden, anders als beim Aufrufenprint("Sam")
und Python-Aufrufe,str("Sam")
die zurückgegeben werdenSam
(ohne Anführungszeichen). Weitere Informationen finden Sie unter Unterschied zwischenstr
undrepr
oder Pythonstr
undlist
s .Antworten:
In Python 2:
In Python 3 (wo
print
ist eine eingebaute Funktion und keine Syntaxfunktion mehr):Beide kehren zurück:
Hierbei wird die
map()
Funktion verwendet, um str für jedes Element von mylist aufzurufen und eine neue Liste von Zeichenfolgen zu erstellen , die dann zu einer Zeichenfolge mit verbunden werdenstr.join()
. Dann ersetzt der%
Zeichenfolgenformatierungsoperator die Zeichenfolge in statt%s
in"[%s]"
.quelle
map
Funktion,str
um jedes Element von aufzurufenmylist
und eine neue Liste von Zeichenfolgen zu erstellen, mit denen er dann eine Zeichenfolge zusammenfügtstr.join
. Anschließend verwendet er den%
Zeichenfolgenformatierungsoperator, um die Zeichenfolge anstelle von%s
in zu ersetzen"[%s]"
."[{0}]".format(", ".join(str(i) for i in mylist))
map(f, xs)
(oderimap
in python2.x)(f(x) for x in xs)
, wennf
ein vordefinierter Aufruf möglich ist. Das führt tendenziell weniger Bytecodes aus und ist normalerweise kompakter. Sicherlich ist das nichtmap(lambda x:..., xs)
viel schlimmer als(... for x in xs)
Dies ist einfacher Code. Wenn Sie neu sind, sollten Sie ihn leicht genug verstehen.
Es druckt sie alle ohne Anführungszeichen, wie Sie wollten.
quelle
Nur Druck verwenden:
quelle
Wenn Sie Python3 verwenden:
quelle
print(end='['); print(*l, sep=', ', end=']\n')
Anstatt zu verwenden
map
, würde ich empfehlen, einen Generatorausdruckjoin
zu verwenden, der einen Iterator akzeptieren kann:Hier
join
ist eine Member-Funktion der String-Klassestr
. Es wird ein Argument benötigt: eine Liste (oder ein Iterator) von Zeichenfolgen, die dann eine neue Zeichenfolge mit allen in diesem Fall verketteten Elementen zurückgibt,
.quelle
", ".join( str(x) for x in list_or_iterator).join('[]')
Sie können alle unerwünschten Zeichen aus einer Zeichenfolge löschen, indem Sie die
translate()
Methode mitNone
für dastable
Argument verwenden, gefolgt von einer Zeichenfolge, die die Zeichen enthält, die für dasdeletechars
Argument entfernt werden sollen.Wenn Sie eine Version von Python vor 2.6 verwenden, müssen Sie stattdessen
string
dietranslate()
Funktion des Moduls verwenden, da die Möglichkeit,None
alstable
Argument zu übergeben, erst mit Python 2.6 hinzugefügt wurde. Die Verwendung sieht folgendermaßen aus:Die Verwendung der
string.translate()
Funktion funktioniert auch in Version 2.6+, daher ist die Verwendung möglicherweise vorzuziehen.quelle
lst = ["it isn't", 3, 'b']
==>["it isnt", 3, b]
und auch mitlst = ['it isn\'t', 3, 'b']
Hier ist eine interaktive Sitzung, die einige der Schritte in @ TokenMacGuys Einzeiler zeigt. Zuerst verwendet er die
map
Funktion, um jedes Element in der Liste in eine Zeichenfolge zu konvertieren (tatsächlich erstellt er eine neue Liste, nicht die Elemente in der alten Liste). Dann verwendet er die String-Methodejoin
, um diese Strings mit', '
ihnen zu kombinieren . Der Rest ist nur die Formatierung von Zeichenfolgen, was ziemlich einfach ist. (Bearbeiten: Diese Instanz ist unkompliziert. Die Formatierung von Zeichenfolgen kann im Allgemeinen etwas komplex sein.)Beachten Sie, dass die Verwendung
join
eine einfache und effiziente Methode zum Erstellen einer Zeichenfolge aus mehreren Teilzeichenfolgen ist, die viel effizienter ist als das sukzessive Hinzufügen von Zeichenfolgen zu Zeichenfolgen, was viel Kopieren hinter den Kulissen erfordert.quelle
Verwenden
.format
für die Formatierung von Zeichenfolgen,Ausgabe:
Erläuterung:
map
wird verwendet, um jedes Element der Liste demstring
Typ zuzuordnen .,
Trennzeichen zusammengefügt.[
und]
in der print-Anweisung, um die Listenklammern anzuzeigen.Referenz:
.format
zur Formatierung von Zeichenfolgen PEP-3101quelle
.format
am pythonischsten. Aber natürlich akzeptiere ich Meinungsverschiedenheiten. ;)Ich wurde von @AniMenon inspiriert, eine allgemeinere pythonische Lösung zu schreiben.
Es wird nur die
format
Methode verwendet. Keine Spur vonstr
, und es ermöglicht die Feinabstimmung des Elementformats. Wenn Sie beispielsweise Gleitkommazahlen als Elemente der Liste haben, können Sie deren Format anpassen, indem Sie in diesem Fall einen Konvertierungsspezifizierer hinzufügen:.2f
Die Ausgabe ist recht anständig:
quelle