Was wäre Ihre bevorzugte Methode, um Zeichenfolgen aus einer Sequenz so zu verketten, dass zwischen jeweils zwei aufeinander folgenden Paaren ein Komma hinzugefügt wird? Das heißt, wie ordnen Sie zum Beispiel ['a', 'b', 'c']
zu 'a,b,c'
? (Die Fälle ['s']
und []
sollten abgebildet werden 's'
und ''
sind.)
Normalerweise benutze ich so etwas ''.join(map(lambda x: x+',',l))[:-1]
, fühle mich aber auch etwas unzufrieden.
Warum die
map
/lambda
Magie? Funktioniert das nichtFalls die Liste Zahlen enthält, können Sie das Listenverständnis verwenden:
oder ein Generatorausdruck:
quelle
",".join(l)
funktioniert nicht in allen Fällen. Ich würde vorschlagen, das CSV-Modul mit StringIO zu verwendenquelle
StringIO
in Python 3from io import StringIO
in Python 3Hier ist eine alternative Lösung in Python 3.0, die Listenelemente ohne Zeichenfolge zulässt:
ein Standardweg
die alternative Lösung
HINWEIS: Das Leerzeichen nach dem Komma ist beabsichtigt.
quelle
Willst du nicht einfach:
Offensichtlich wird es komplizierter, wenn Sie Kommas usw. in den Werten in Anführungszeichen setzen müssen. In diesem Fall würde ich vorschlagen, das CSV-Modul in der Standardbibliothek zu betrachten:
https://docs.python.org/library/csv.html
quelle
@ Peter Hoffmann
Die Verwendung von Generatorausdrücken hat den Vorteil, dass auch ein Iterator erstellt wird, spart jedoch den Import von itertools. Darüber hinaus werden Listenverständnisse im Allgemeinen der Zuordnung vorgezogen. Daher würde ich erwarten, dass Generatorausdrücke der Imap vorgezogen werden.
quelle
my_list
kann jede Art von Variablen enthalten. Dies vermeidet das Ergebnis'A,,,D,E'
.quelle
quelle
@ jmanning2k mit einem Listenverständnis hat den Nachteil, eine neue temporäre Liste zu erstellen. Die bessere Lösung wäre die Verwendung von itertools.imap, die einen Iterator zurückgibt
quelle
str.join
Arbeit schneller mitlist
im Vergleich zum GeneratorHier ist ein Beispiel mit Liste
Genauer:-
Beispiel 2: -
quelle
Ich würde sagen, dass die
csv
Bibliothek hier die einzig sinnvolle Option ist, da sie für alle CSV-Anwendungsfälle wie Kommas in einer Zeichenfolge usw. entwickelt wurde.Eine Liste ausgeben
l
in eine CSV-Datei aus:Es ist auch möglich,
writer.writerows(iterable)
mehrere Zeilen an csv auszugeben.Dieses Beispiel ist mit Python 3 kompatibel, da die andere hier verwendete Antwort
StringIO
Python 2 ist.quelle
Wenn ich nichts vermisse,
','.join(foo)
sollte ich tun, wonach Sie fragen.(edit: und wie jmanning2k betont,
ist sicherer und ziemlich pythonisch, obwohl die resultierende Zeichenfolge schwer zu analysieren ist, wenn die Elemente Kommas enthalten können - an diesem Punkt benötigen Sie die volle Leistung des
csv
Moduls, wie Douglas in seiner Antwort hervorhebt.)quelle
Meine zwei Cent. Ich mag einfacher einen einzeiligen Code in Python:
Es ist pythonisch und funktioniert für Zeichenfolgen, Zahlen, Keine und leere Zeichenfolgen. Es ist kurz und erfüllt die Anforderungen. Wenn die Liste keine Zahlen enthält, können wir diese einfachere Variante verwenden:
Auch diese Lösung erstellt keine neue Liste, sondern verwendet einen Iterator, wie @Peter Hoffmann gezeigt (danke).
quelle