2010-07-20 17 views
15

Welcher Python ist am besten, um eine Liste von Tupeln in Zeichenketten umzuwandeln?Python - Liste der Tupel in Zeichenkette umwandeln

ich habe:

[(1,2), (3,4)] 

und ich will:

"(1,2), (3,4)" 

Meine Lösung für dieses Problem war:

l=[(1,2),(3,4)] 
s="" 
for t in l: 
    s += "(%s,%s)," % t 
s = s[:-1] 

Gibt es einen pythonic Weg, dies zu tun?

+2

Was sind diese Tupel für, warum müssen sie in einer Zeichenfolge sein, und müssen sie tatsächlich Tupel sein? –

+1

Warum möchten Sie das tun? Was ist dein wirkliches Problem? – SilentGhost

+1

@Ignacio, @SilentGhost: Ich würde es lieben, wenn ihr euch mehr mit euren Kommentaren beschäftigt (Ich lerne immer noch selbst Python). Es ist vielleicht keine wirkliche Antwort auf das Formatierungsproblem von OP's String, aber ich bin sicher, ihr habt sehr wichtige Punkte zu machen. – polygenelubricants

Antwort

22

möchten Sie vielleicht etwas so einfach bedienen wie:

>>> l = [(1,2), (3,4)] 
>>> str(l).strip('[]') 
'(1, 2), (3, 4)' 

.. das ist praktisch, aber nicht richtig funktionieren garantiert

+2

Was ist, wenn die Tupel Tupel von Strings sind, die [] enthalten? –

+5

@Rob: 'str.strip()' wird nur von den Enden entfernt. –

+4

Es scheint eine schlechte Übung zu sein, sich auf die interne String-Repräsentation einer Liste zu verlassen. –

30

Sie können so etwas wie dies versuchen (see also on ideone.com):

myList = [(1,2),(3,4)] 
print ",".join("(%s,%s)" % tup for tup in myList) 
# (1,2),(3,4) 
+0

während @ Mykhal Lösung ist einfacher, ich denke, das ist hübscher :) –

+0

Pythonic, robust und kurz. Vielen Dank. – Neowizard

1

Wie wäre es

l = [(1, 2), (3, 4)] 
print repr(l)[1:-1] 
# (1, 2), (3, 4) 
+0

Der Abstand hier ist nicht wirklich, wie Sie es vorschrieben; Wenn das wichtig ist, wird dieser Ansatz nicht funktionieren, da Python nach jedem Element in einer Liste/einem Tupel ein Leerzeichen hinzufügt. – Benj

13

Wie wäre:

>>> tups = [(1, 2), (3, 4)] 
>>> ', '.join(map(str, tups)) 
'(1, 2), (3, 4)' 
+1

Mit Abstand die sauberste Lösung! –

+0

meisten "Python" Antwort. –

0

Drei weitere :)

l = [(1,2), (3,4)] 

unicode(l)[1:-1] 
# u'(1, 2), (3, 4)' 

("%s, "*len(l) % tuple(l))[:-2] 
# '(1, 2), (3, 4)' 

", ".join(["%s"]*len(l)) % tuple(l) 
# '(1, 2), (3, 4)' 
1

Ich denke, das recht ordentlich ist:

>>> l = [(1,2), (3,4)] 
>>> "".join(str(l)).strip('[]') 
'(1,2), (3,4)' 

Versuchen Sie es, es wie ein Zauber für mich gearbeitet.

Verwandte Themen