2010-07-20 10 views
15

¿Cuál es la forma más pitónica de convertir una lista de tuplas en una cadena?Python - lista de conversiones de tuplas en la cadena

tengo:

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

y quiero:

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

Mi solución para esto ha sido:

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

¿Existe una manera más Pythonic para hacer esto?

+2

¿Para qué son estas tuplas, por qué tienen que estar en una cadena, y de hecho deben ser tuplas? –

+1

¿por qué querrías hacer esto? ¿Cuál es tu problema real? – SilentGhost

+1

@Ignacio, @SilentGhost: Me encantaría que ustedes elaboren más sobre sus comentarios (todavía estoy aprendiendo Python). Puede que no sea una respuesta real al problema de formato de cadena de OP, pero estoy seguro de que ustedes tienen puntos muy importantes que hacer. – polygenelubricants

Respuesta

22

es posible que desee utilizar algo tan simple como:

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

.. que es muy útil, pero no garantiza que funcione correctamente

+2

¿Qué sucede si las tuplas son tuplas de cadenas que contienen []? –

+5

@Rob: 'str.strip()' solo elimina de los extremos. –

+4

Parece una mala práctica confiar en la representación de cadena interna de una lista. –

30

Usted puede intentar algo como esto (see also on ideone.com):

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

mientras que la solución de @ mykhal es más simple, creo que es más bonita :) –

+0

Pitonica, robusta y corta. Gracias. – Neowizard

1

¿Qué tal

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

El espaciado aquí no es realmente como lo estipuló; si eso es importante, este enfoque no funcionará ya que python agrega un espacio después de cada elemento en una lista/tupla. – Benj

13

¿Qué tal:

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

Solución más limpia por lejos! –

+0

respuesta más "pitonica". –

0

Tres más :)

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

Creo que esto es bastante limpio:

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

Inténtelo, funcionó como un encanto para mí.

Cuestiones relacionadas