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.

5voto

Hier ist ein Beispiel mit Liste

>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [i[0] for i in myList])) 
>>> print "Output:", myList
Output: Apple,Orange

Genauer:-

>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [type(i) == list and i[0] for i in myList])) 
>>> print "Output:", myList
Output: Apple,Orange

Beispiel 2:-

myList = ['Apple','Orange']
myList = ','.join(map(str, myList)) 
print "Output:", myList
Output: Apple,Orange

2voto

Ron Kalian Punkte 2614

Ich würde sagen, die csv Bibliothek ist hier die einzig sinnvolle Option, da sie für alle csv-Anwendungsfälle wie z. B. Kommas in einer Zeichenkette usw. entwickelt wurde.

So geben Sie eine Liste aus l in eine .csv-Datei:

import csv
with open('some.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(l)  # this will output l as a single row.  

Es ist auch möglich, Folgendes zu verwenden writer.writerows(iterable) um mehrere Zeilen in csv auszugeben.

Dieses Beispiel ist mit Python 3 kompatibel, da die andere Antwort hier StringIO das ist Python 2.

1voto

David Singer Punkte 1142

Es sei denn, ich übersehe etwas, ','.join(foo) sollte das tun, worum Sie bitten.

>>> ','.join([''])
''
>>> ','.join(['s'])
's'
>>> ','.join(['a','b','c'])
'a,b,c'

(edit: und wie jmanning2k anmerkt,

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

ist sicherer und ziemlich pythonisch, obwohl die resultierende Zeichenkette schwer zu parsen sein wird, wenn die Elemente Kommas enthalten können -- an diesem Punkt brauchen Sie die volle Leistung der csv Modul, wie Douglas in seiner Antwort hervorhebt).

0voto

Mmm auch Bedarf für SQL ist :

l = ["foo" , "baar" , 6]
where_clause = "..... IN ("+(','.join([ f"'{x}'" for x in l]))+")"
>> "..... IN ('foo','baar','6')"

genießen.

-1voto

Roberto Punkte 354

Meine Meinung dazu. Ich mag einfacheren und einzeiligen Code in Python:

>>> from itertools import imap, ifilter
>>> l = ['a', '', 'b', 1, None]
>>> ','.join(imap(str, ifilter(lambda x: x, l)))
a,b,1
>>> m = ['a', '', None]
>>> ','.join(imap(str, ifilter(lambda x: x, m)))
'a'

Es ist pythonisch, funktioniert für Strings, Zahlen, None und leeren String. Sie ist kurz und erfüllt die Anforderungen. Wenn die Liste keine Zahlen enthalten soll, können wir diese einfachere Variante verwenden:

>>> ','.join(ifilter(lambda x: x, l))

Auch diese Lösung erstellt keine neue Liste, sondern verwendet einen Iterator, wie @Peter Hoffmann gezeigt hat (danke).

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