Mi salida de un bucle for es

string = ""
for x in something:
   #some operation
   string =  x += string 

print(string)

5
66
777

Yo uso el siguiente código para tenerlas en la misma línea

print(string, end=", ")

Y luego me sale

5, 66, 777,

Quiero que el resultado final sea

 5, 66, 777

¿Cómo cambio el código print(string, end=", ") para que no haya , al final

La cadena anterior es una entrada generada por el usuario, solo puede 1 o 2,3, 45, 98798, 45, etc.

Hasta ahora lo he intentado

print(string[:-1], end=", ")                   #result = , 6, 77, 
print((string, end=", ")[:-1])                 #SyntaxError: invalid syntax  
print((string, end=", ").replace(", $", ""))   #SyntaxError: invalid syntax  
print(", ".join([str(x) for x in string]))     # way off result 5
                                                                6, 6
                                                                    7, 7, 7
    print(string, end=", "[:-1])                  #result 5,66,777,(I thought this will work but no change to result)
   print(*string, sep=', ')                          #result 5
                                                             6, 6
                                                             7, 7, 7 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

user input
twenty five, four, nine 

Se

25, 4, 9, #(that stupid comma in the end)
5
MarcoBianchi 8 sep. 2018 a las 01:57

4 respuestas

La mejor respuesta

Puede crear una lista de cadenas en su bucle for e imprimir palabras posteriores usando join:

strings = []

for ...:
   # some work to generate string
   strings.append(sting)

print(', '.join(strings))

alternativamente , si su something tiene una longitud bien definida (es decir, puede len(something)), puede seleccionar el terminador de cadena de manera diferente en el caso final:

for i, x in enumerate(something):
   #some operation to generate string

   if i < len(something) - 1:
      print(string, end=', ')
   else:
      print(string)

ACTUALIZACIÓN basada en código de ejemplo real:

Tomando esta parte de su código:

value = input("")
string = ""
for unit_value in value.split(", "):
    if unit_value.split(' ', 1)[0] == "negative":
        neg_value = unit_value.split(' ', 1)[1]
        string = "-" + str(challenge1(neg_value.lower()))
    else:
        string = str(challenge1(unit_value.lower()))

    print(string, end=", ")

Y siguiendo la primera sugerencia anterior, obtengo:

value = input("")
string = ""
strings = []
for unit_value in value.split(", "):
    if unit_value.split(' ', 1)[0] == "negative":
        neg_value = unit_value.split(' ', 1)[1]
        string = "-" + str(challenge1(neg_value.lower()))
    else:
        string = str(challenge1(unit_value.lower()))

    strings.append(string)

print(', '.join(strings))
4
Joshua R. 7 sep. 2018 a las 23:40
l = [5, 66, 777]
print('{0}, {1}, {2}'.format(*l))
0
blueheart 7 sep. 2018 a las 23:13

En caso de que su bucle for también esté haciendo algo más que imprimir, puede mantener su estructura actual con este enfoque.

 strings = ['5', '66', '777']

 for i in range(len(strings)-1):
      # some operation

      print(strings[i], end=', ')

 # some operation (last time)
 print(strings[-1])

5, 66, 777

0
Ville Laitila 7 sep. 2018 a las 23:08

Si primero puede construir una lista de cadenas, puede usar el desempaquetado de secuencia dentro de print y usar sep en lugar de end:

strings = ['5', '66', '777']

print(*strings, sep=', ')

5, 66, 777
2
jpp 7 sep. 2018 a las 23:09