2012-04-25 4 views
7

ich eine Liste habe als:Concatenate oder Druckliste Elemente mit einem Komma in Python

>>> l = ['1', '2', '3', '4'] 

wenn ich Anweisung beitreten,

>>> s = ', '.join(l) 

wird mir ausgegeben als:

'1, 2, 3, 4' 

Aber, was ich zu tun habe Wenn ich Ausgabe als ausgeben möchte:

'1, 2, 3, 4,' 

(Ich weiß, dass ich String concat verwenden kann, aber ich will etwas besseren Weg, wissen)

.

Antwort

10

String Verkettung ist der beste Weg:

l = ['1', '2', '3', '4'] # original list 
s = ', '.join(l) + ',' 

aber Sie haben andere Optionen auch:

  1. Mapping durch Komma beendet Strings, dann verbindet:

    l = ['1', '2', '3', '4'] # original list 
    s = ' '.join(map(lambda x: '%s,' % x, l)) 
    
  2. Leere Zeichenfolge an die verbundene Liste anfügen (Original nicht ändern l Liste!):

    l = ['1', '2', '3', '4'] # original list 
    s = ', '.join(l + ['']).rstrip(' ') 
    
  3. Mit String-Formatierung anstelle der Verkettung:

    l = ['1', '2', '3', '4'] # original list 
    s = '%s,' % (', '.join(l)) 
    
+0

Sie möchten vielleicht 'l' in' s' für alle Optionen oder umgekehrt ändern? – okm

+0

@okm: Du hast Recht, danke. – Tadeck

1

Um die Leerzeichen enthalten Sie gezeigt haben, müssen Sie in der Trenn-String, einen Raum haben:

s = ", ".join(l) + "," 

Oder es DRYer machen:

sep = ", " 
s = (sep.join(l) + sep).rstrip() 

In letzterem rstrip() ist nur verwendet, um den abschließenden Leerzeichen (Teil von sep) zu entfernen, da das nicht in Ihrer gewünschten Ausgabe ist. Es ist nicht die billigste Art, dies zu tun, aber es ist ziemlich klar.

+0

sagte ich bereits, dass ich möchte nicht verwenden, string concat – sam

+0

@aix: Ich stimme der Anforderung zu. – Tadeck

+0

@aix: nicht wirklich. Stellen Sie sich vor, ihr Trennzeichen ist komplexer als nur ein Komma (vielleicht sogar ein Ausdruck) und sie wollen es nicht zweimal wiederholen oder eine temporäre Variable verwenden. Macht für mich vollkommen Sinn. – georg

4

Für str.join() zu arbeiten, müssen die Elemente in der iterablen (d. H. Eine Liste hier), Zeichenfolgen selbst sein. Wenn Sie ein abschließendes Komma benötigen, fügen Sie einfach eine leere Zeichenfolge am Ende Ihrer Liste hinzu.

bearbeiten: es ein wenig zu konkretisieren:

l = map(str, [1,2,3,4]) 
l.append('') 
s = ','.join(l) 
+0

Danke @MichaelWild - Ich habe mich gefragt, warum ich in meinem Code immer ein Komma hinterließ, und es stellte sich heraus, dass der letzte Eintrag im Array, den ich hatte, der leere String war. Prost! – sdaau

1

Erstens ','.join(l) wird nicht funktionieren, da es die Elemente erfordert Saiten zu sein, was sie nicht sind.

Sie können das in Ordnung bringen und das folgende Komma hinzufügen, etwa so:

In [4]: ', '.join(map(str, l)) + ',' 
Out[4]: '1, 2, 3, 4,' 

Ich denke, das bei weitem das sauberste Weg ist, es zu tun.

1

Wenn Sie Verkettung nicht wollen, Dinge Hacky sein könnte ...

>>> l = [1, 2, 3, 4] 
>>> repr(l+[0])[1:-3] # or str 
'1, 2, 3, 4,' 
6

Wenn Sie sich in Python 3 befinden, können Sie die integrierte Druckfunktion nutzen:

  • *l entpackt die Liste der Elemente als einzelne Argumente zu übergeben
  • sep ist ein optionales Argument zu drucken, die von den Elementen zu bedruckenden in zwischen den Elementen festgelegt ist, hier stellte ich es ', ' mit einem Raum Wie Sie benötigen
  • end ist ein optionales Argument, das an der und der resultierenden gedruckten Zeichenfolge geschoben wird. Ich stelle es auf ',' ohne Raum, um Ihre Notwendigkeit

Sie es Python 2.6 durch die

Druckfunktion
from __future__ import print_function 

jedoch auf diese Weise mehrere Einsprüche hat gehen Import beginnen können zum Spiel:

  • Dies setzt voraus, dass Sie die resultierende Zeichenfolge in stdout ausgeben möchten. oder Sie können die Ausgabe in einer Datei mit dem optionalen Argument file in eine Datei umleiten.
  • Wenn Sie in Python 2 sind, kann der __future__ Import Sie Code-Kompatibilität brechen, so müssten Sie Ihren Code in einem separaten Modul isolieren, wenn der Rest Dein Code ist nicht kompatibel.

Lange Rede kurzer Sinn, entweder diese Methode oder die anderen vorgeschlagenen Antworten sind viele Anstrengungen nur zu vermeiden, zu versuchen, ein +',' am Ende der join Hinzufügen String resultierenden

0

Diese IDLE-Sitzung ist ein gutes Beispiel wie die Listenelemente in einen String mit einem Komma ziehen:

>>> l = ['1', '2', '3', '4'] 
>>> ' '.join(x+',' for x in l) 
'1, 2, 3, 4,' 
0

ich weiß nicht, ob dies ist, was Sie suchen? Es funktioniert aber.

l = [1,2,3,4]

für num in l: print (str (num), end = "")

Verwandte Themen