Python – lista de impresión separada con comas

Estoy escribiendo un fragmento de código que debería mostrar una lista de elementos separados con una coma. La lista se genera con un bucle for. Yo uso el

for x in range(5): print(x, end=",") 

El problema es que no sé cómo deshacerme de la última coma que se agrega con la última entrada en la lista. Produce esto:

 0,1,2,3,4, 

¿Cómo elimino el final ‘,’?

Pase sep="," como argumento para print()

Usted está casi allí con la statement impresa.

No hay necesidad de un bucle, la impresión tiene un parámetro sep , así como el end .

 >>> print(*range(5), sep=", ") 0, 1, 2, 3, 4 

Una pequeña explicación

La print incorporada toma cualquier número de elementos como argumentos para imprimir. Todos los argumentos que no sean de palabras clave se imprimirán, separados por sep . El valor predeterminado para sep es un espacio único.

 >>> print("hello", "world") hello world 

Cambiando sep tiene el resultado esperado.

 >>> print("hello", "world", sep=" cruel ") hello cruel world 

Cada argumento es stringificado como con str() . Pasar un iterable a la statement de impresión hará que el iterable sea un argumento.

 >>> print(["hello", "world"], sep=" cruel ") ['hello', 'world'] 

Sin embargo, si coloca el asterisco delante de su iterable esto lo descompone en argumentos separados y permite el uso previsto de sep .

 >>> print(*["hello", "world"], sep=" cruel ") hello cruel world >>> print(*range(5), sep="---") 0---1---2---3---4 

Usando join como alternativa

El enfoque alternativo para unir una iterable en una cadena con un separador dado es usar el método de join de una cadena separadora.

 >>>print(" cruel ".join(["hello", "world"])) hello cruel world 

Esto es un poco más torpe porque requiere que los elementos que no pertenecen a una cadena se conviertan explícitamente en cadenas.

 >>>print(",".join([str(i) for i in range(5)])) 0,1,2,3,4 

Fuerza bruta – no pythonica

El enfoque que sugiere es uno donde se usa un bucle para concatenar una cadena que agrega comas en el camino. Por supuesto, esto produce el resultado correcto pero es un trabajo mucho más difícil.

 >>>iterable = range(5) >>>result = "" >>>for item, i in enumerate(iterable): >>> result = result + str(item) >>> if i > len(iterable) - 1: >>> result = result + "," >>>print(result) 0,1,2,3,4 

Puede usar str.join() y crear la cadena que desea imprimir y luego imprimirla. Ejemplo –

 print(','.join([str(x) for x in range(5)])) 

Demo

 >>> print(','.join([str(x) for x in range(5)])) 0,1,2,3,4 

Estoy utilizando la comprensión de lista anterior, ya que es más rápida que la expresión del generador, cuando se usa con str.join .

Para hacer eso, puedes usar str.join() .

 In [1]: print ','.join(map(str,range(5))) 0,1,2,3,4 

Tendremos que convertir los números en el range(5) a la cadena primero para llamar a str.join() . Lo hacemos utilizando la operación map() . Luego nos unimos a la lista de cadenas obtenidas de map() con una coma,.