2012-04-25 9 views

Respuesta

10

La concatenación de cadenas es la mejor manera:

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

pero hay otras opciones también:

  1. Mapeo de las cadenas terminado por comas, y luego unirse a:

    l = ['1', '2', '3', '4'] # original list 
    s = ' '.join(map(lambda x: '%s,' % x, l)) 
    
  2. Anexar cadena vacía a la lista unida (no modifique el original l lista!):

    l = ['1', '2', '3', '4'] # original list 
    s = ', '.join(l + ['']).rstrip(' ') 
    
  3. Utilizando el formato de cadenas en lugar de la concatenación:

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

¿Le gustaría cambiar 'l' a' s' para todas las opciones o viceversa? – okm

+0

@okm: Tienes razón, gracias. – Tadeck

1

Para incluir los espacios que has demostrado, es necesario tener un espacio en la cadena de separación:

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

O hacer que DRYer:

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

En este último, es sólo rstrip() utilizado para eliminar el espacio final final (parte de sep) ya que no está en su salida deseada. No es la forma más barata de hacerlo, pero está bastante claro.

+0

i ya dijo que yo no quiero utilizar string concat – sam

+0

@aix: estoy de acuerdo con el requisito. – Tadeck

+0

@aix: no realmente. Imagina que su separador es más complejo que solo una coma (quizás incluso una expresión) y no quieren repetirlo dos veces o usar una variable temporal. Tiene perfecto sentido para mí. – georg

4

Para que str.join() funcione, los elementos contenidos en el iterable (es decir, una lista aquí), deben ser cadenas. Si quieres una coma al final, simplemente agrega una cadena vacía al final de tu lista.

Editar: Para la carne hacia fuera un poco:

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

Gracias @MichaelWild - Me preguntaba por qué seguía obteniendo una coma al final en mi código, y resulta que eso se debía a que la última entrada en el arreglo que tenía era la cadena vacía. ¡Aclamaciones! – sdaau

1

En primer lugar, ','.join(l) no funcionará en absoluto ya que requiere de los elementos a ser cadenas, que no lo son.

Puede arreglar eso y añadir la coma siguiente modo:

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

Creo que este es de lejos la manera más limpia de hacerlo.

1

Si no desea que la concatenación, las cosas podrían ser hacky ...

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

Si está en Python 3, puede aprovechar la función de impresión incorporada:

print(*l, sep=', ', end=',') 
  • *l desempaqueta la lista de elementos para pasarlos como argumentos individuales para imprimir
  • sep es un argumento opcional que se establece entre elementos impresos de los elementos, aquí me puse a ', ' con un espacio como requiere
  • end es un argumento opcional que se insertará en el y de la cadena impresa resultante. Me puse a ',' sin espacio acorde a sus necesidades

Se puede utilizar a partir de Python 2.6 mediante la importación de la función de impresión

from __future__ import print_function 

Sin embargo yendo de esta manera tiene varias advertencias:

  • Esto supone que desea generar la cadena resultante en stdout; o puede redireccionar la salida en un archivo con el argumento opcional file en un archivo
  • si está en Python 2, la importación __future__ puede romper la compatibilidad del código por lo que necesitaría aislar su código en un módulo separado si el resto de tu código no es compatible.

cuento largo, ya sea este método o las otras respuestas propuestas son una gran cantidad de esfuerzos para tratar de evitar simplemente añadiendo un +',' al final de la join resultante cadena

0

Esta sesión ociosa es un buen ejemplo de cómo tirar de los elementos de la lista en una cadena con una coma final:

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

no sé si esto es lo que busca? Sin embargo, funciona

l = [1,2,3,4]

para num en l: de impresión (str (num), final = "")

Cuestiones relacionadas