2010-03-08 17 views
27

diesen Python-Code Betrachten Sie eine Liste der durch Komma getrennte Werte für den DruckPython, Druck getrennte Liste

for element in list: 
    print element + ",", 

Was für den Druck so die bevorzugte Methode ist, dass ein Komma erscheint nicht, wenn element das letzte Element in der Liste ist .

ex

a = [1, 2, 3] 
for element in a 
    print str(element) +",", 

output 
1,2,3, 
desired 
1,2,3 
+3

Mögliche Duplikat [Wie würden Sie eine durch Kommata getrennte machen Zeichenfolge aus einer Liste?] (http://stackoverflow.com/questions/44778/how-would-you-make-a-comma-separated-string-from-a-list) – manetsus

Antwort

75
>>> ','.join(map(str,a)) 
'1,2,3' 
+1

+1 für die Erinnerung, dass Sie zuerst in 'str' konvertieren müssen. –

+6

+1 für guten Code, -1 für keinen Abstand zwischen str und a. –

+5

Leerzeichen sind für Sauger –

2

Das ist, was join für ist.

','.join([str(elem) for elem in a]) 
+1

'TypeError: Sequenzelement 0: erwartet string, int gefunden.'Es funktioniert nicht für seine Beispieleingabe. – Ponkadoodle

+0

Richtig, tut mir leid. Es konvertiert die Ints nicht automatisch in Zeichenfolgen. Behoben mit einem geschickten Listenverständnis. – MatrixFrog

+6

Verwenden Sie kein Listenverständnis. Nimm die '[]' s heraus und es wird ein Generator erzeugt, der genauso gut funktioniert, ohne eine (möglicherweise große) unnötige temporäre Liste zu erstellen. –

0
print ','.join(a) 
+0

'Join' konvertiert nicht automatisch Ints in Strings, so dass dies nicht funktioniert. –

+0

@musicfreak Scheint dir das albern, dass es nicht automatisch str str()? Schließlich ist ".join() eine String-Methode. Ich frage mich, warum es das nicht kostenlos macht. – orokusaki

+1

@orokusaki: Es geht gegen den Grundsatz "Explizit ist besser als implizit". –

12

A ','.join wie in anderen Antworten vorgeschlagen ist die typische Python-Lösung; die normale Vorgehensweise, die ich nicht so weit in eine der Antworten sehen eigentümlich ist

print ','.join(str(x) for x in a) 

als Generator Ausdruck oder genexp bekannt.

Wenn Sie eine Schleife bevorzugen (oder benötigen eine für andere Zwecke, wenn Sie zum Beispiel tun, sind für jedes Element mehr als nur drucken,), gibt es natürlich auch eine hervorragende Alternativen:

for i, x in enumerate(a): 
    if i: print ',' + str(x), 
    else: print str(x), 

diese ist ein erster Schalter (funktioniert für jedes iterierbare a, ob eine Liste oder sonst), so dass es das Komma vor jedes Element, aber das erste. Ein Last-Zeitschalter ist etwas weniger elegant und es funktioniert nur für Iterables die eine len() (nicht für ganz allgemeine) haben:

for i, x in enumerate(a): 
    if i == len(a) - 1: print str(x) 
    else: print str(x) + ',', 

dieses Beispiel nimmt auch die Vorteile der letzten Zeitschalter, die Linie zu beenden, wenn es druckt den allerletzten Gegenstand.

Die eingebaute Funktion enumerate ist sehr oft nützlich, und es lohnt sich, daran zu denken!

+0

Enumerate ist gut, aber in OP Fall ist eine einfache Verbindung genug. – ghostdog74

+1

Sicher, das ist, womit ich angefangen habe (geben Sie die Genexp zu einem Zeitpunkt, als andere Antworten Karten, Listcomps oder keine Konvertierung zu String hatte) - haben Sie _seen_ der erste Absatz dieser Antwort, vielleicht? -) Zum ersten Mal und Last-Zeit-Schalter sind vielseitiger, und keine andere Antwort hat sie sogar erwähnt, also habe ich natürlich auch darauf hingewiesen (einschließlich der Tatsache, dass sie am besten über Enumerate gemacht werden). –

+0

Wenn ich auf deine Antwort schaue und mir die Antwort von Ghostdog anschaue, frage ich mich was. Nutzt ein Listenverständnis mehr Speicher als map aus seinem Beispiel, aber ist map() langsamer als ein LH? BTW, ich empfahl dein Buch jemandem, der mir eine E-Mail über Python geschickt hat :) – orokusaki

-3
>>> a=[1,2,3] 
>>> a=[str(i) for i in a ] 
>>> s=a[0] 
>>> for i in a[1:-1]: s="%s,%s"%(s,i) 
... 
>>> s=s+","+a[-1] 
>>> s 
'1,2,3' 
+0

ich muss davon ausgehen, dass Sie Witze machen – Mike

-1
def stringTokenizer(sentense,delimiters): 
    list=[] 
    word="" 
    isInWord=False 
    for ch in sentense: 
     if ch in delimiters: 
      if isInWord: # start ow word 
       print(word) 
       list.append(word) 
       isInWord=False 
     else: 
      if not isInWord: # end of word 
       word="" 
       isInWord=True 
      word=word+ch 
    if isInWord: # end of word at end of sentence 
      print(word) 
      list.append(word) 
      isInWord=False 
    return list 

print (StringTokenizer (u "привет парни! Я вам стихами, может быть, еще отвечу", "!"))

+0

Ich habe Probe Zeichenfolge ersetzt, weil es zu offensiv für Russisch gesprochen wird. –

1

Es gibt zwei Möglichkeiten,

Sie kann die Antwort direkt unter Verwendung print(*a, sep=',') drucken dieses benutzt Trennzeichen als "," erhalten Sie die Antwort als,

1,2,3 

und eine andere Option ist,

print(','.join(str(x) for x in list(a))) 

dies die Liste iterieren wird und drucken Sie die (a) und drucken die Ausgabe als

1,2,3