704 Stimmen

Wie kann man eine kommagetrennte Zeichenkette aus einer Liste von Zeichenketten erstellen?

Was wäre Ihre bevorzugte Methode, um Zeichenketten aus einer Sequenz so zu verketten, dass zwischen zwei aufeinanderfolgenden Paaren jeweils ein Komma hinzugefügt wird? Das heißt, wie kann man zum Beispiel abbilden, ['a', 'b', 'c'] まで 'a,b,c' ? (Die Fälle ['s'] y [] sollte abgebildet werden auf 's' y '' ).

In der Regel verwende ich dann etwas wie ''.join(map(lambda x: x+',',l))[:-1] aber auch das Gefühl, etwas unbefriedigt zu sein.

1310voto

Mark Biek Punkte 140395
my_list = ['a', 'b', 'c', 'd']
my_string = ','.join(my_list)

'a,b,c,d'

Dies wird nicht funktionieren, wenn die Liste ganze Zahlen enthält


Enthält die Liste andere Typen als Zeichenketten (z. B. Ganzzahlen, Fließkommazahlen, Bools, None), dann do:

my_string = ','.join(map(str, my_list))

94voto

jmanning2k Punkte 8949

Warum die map / lambda Magie? Funktioniert das nicht?

>>> foo = ['a', 'b', 'c']
>>> print(','.join(foo))
a,b,c
>>> print(','.join([]))

>>> print(','.join(['a']))
a

Wenn die Liste Zahlen enthält, können Sie das Listenverständnis verwenden:

>>> ','.join([str(x) for x in foo])

oder einen Generator-Ausdruck:

>>> ','.join(str(x) for x in foo)

29voto

Ricky Sahu Punkte 21493

",".join(l) wird nicht in allen Fällen funktionieren. Ich würde vorschlagen, das csv-Modul mit StringIO zu verwenden

import StringIO
import csv

l = ['list','of','["""crazy"quotes"and\'',123,'other things']

line = StringIO.StringIO()
writer = csv.writer(line)
writer.writerow(l)
csvcontent = line.getvalue()
# 'list,of,"[""""""crazy""quotes""and\'",123,other things\r\n'

19voto

Aaron Maenpaa Punkte 112919

@Peter Hoffmann

Die Verwendung von Generatorausdrücken hat den Vorteil, dass auch ein Iterator erzeugt wird, aber der Import von itertools entfällt. Außerdem werden Listenauffassungen im Allgemeinen gegenüber map bevorzugt, daher würde ich erwarten, dass Generatorausdrücke gegenüber imap bevorzugt werden.

>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join(str(bit) for bit in l)
'1,foo,4,bar'

17voto

jfs Punkte 370717

Hier ist eine alternative Lösung in Python 3.0, die nicht-String-Listenelemente erlaubt:

>>> alist = ['a', 1, (2, 'b')]
  • eine Standardmethode

    >>> ", ".join(map(str, alist))
    "a, 1, (2, 'b')"
  • die alternative Lösung

    >>> import io
    >>> s = io.StringIO()
    >>> print(*alist, file=s, sep=', ', end='')
    >>> s.getvalue()
    "a, 1, (2, 'b')"

HINWEIS: Das Leerzeichen nach dem Komma ist beabsichtigt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X