Considerar este código de Python para la impresión de una lista de valores separados por comas

for element in list:
    print element + ",",

Lo que es el método preferido para la impresión de una coma no aparece si element es el último elemento de la lista.

ex

a = [1, 2, 3]
for element in a
  print str(element) +",",

output
1,2,3,
desired
1,2,3
InformationsquelleAutor Mike | 2010-03-08

8 Comentarios

  1. 92
    >>> ','.join(map(str,a))
    '1,2,3'
    • +1 para recordar que usted tiene que convertir a str primera.
    • +1 para un buen código, -1 para no poner un espacio entre str y un.
    • los espacios son para los tontos
    • ¿Cómo puedo usar esto con un campo de un objeto? así que en lugar de «un» me gustaría tener».nombre», por ejemplo?
  2. 13

    Un ','.join como se sugiere en otras respuestas es la típica solución Python; la aproximación normal, que curiosamente no veo en ninguna de las respuestas, hasta ahora, es

    print ','.join(str(x) for x in a)

    conocido como un generador de expresión o genexp.

    Si usted prefiere un bucle (o necesita uno para otros fines, si estás haciendo algo más que imprimir en cada elemento, por ejemplo), por supuesto, hay también excelentes alternativas:

    for i, x in enumerate(a):
      if i: print ',' + str(x),
      else: print str(x),

    esto es un interruptor de tiempo (funciona para cualquier iterable una, si una lista o de otra manera), de modo que los lugares de la coma antes de cada elemento, sino que la primera. Un último modificador de tiempo es un poco menos elegante y trabajo sólo para iterables que tienen un len() (no por completo a los generales):

    for i, x in enumerate(a):
      if i == len(a) - 1: print str(x)
      else: print str(x) + ',',

    este ejemplo también se aprovecha de la última interruptor de tiempo para terminar la línea cuando la impresión de que el último elemento.

    La enumerar función es muy útil, y bien vale la pena tener en mente!

    • enumerar es buena, pero en la OP del caso, una simple combinación es suficiente.
    • Seguro, eso es lo que empecé con el genexp en un momento cuando las otras respuestas mapas, listcomps, o no la conversión a cadena) — tiene usted visto el primer párrafo de esta respuesta, por ventura?-) Por primera vez y la última interruptores de tiempo son más versátiles, y no hay otra respuesta, incluso mencionó ellos, así que elegí a punto de salir también, por supuesto (incluyendo el hecho de que ellos son mejores realiza a través de enumerar).
    • Mirando tu respuesta y mirando ghostdog la respuesta, me pregunto algo. Hace una lista de comprensión de usar más memoria que el mapa será a partir de su ejemplo, pero es map() más lenta que la de LH? Por CIERTO, he recomendado el libro a alguien que me envió para ayudar en Python 🙂
    • el consumo de memoria es el mismo para el mapa y listcomp (inferior para genexp, que es lo que puedo usar en su lugar); genexp suele ser ligeramente más lento (si usted tiene una gran cantidad de memoria física disponible, que es, de lo contrario el consumo de memoria de listcomp y mapa en perjuicio de su rendimiento), y el mapa, a veces, incluso más rápido que listcomp (a menos que implica el uso de una expresión lambda, lo que ralentiza). Ninguno de estos problemas de rendimiento es en absoluto un problema, a menos que usted debe ver su huella en la memoria por cualquier motivo, en cuyo caso genexp de la parsimonia en la memoria puede ser un problema;-).
    • No me había dado cuenta de que la izquierda fuera de los corchetes. Voy a ver ahora. Me gusta la idea de usar un genexp. Prefiero dejar que mis usuarios esperan el extra .1 milisegundos, que la disminución del número de solicitudes simultáneas que puedo manejar por acaparando la memoria. Por no hablar de que ya no puedo controlar el tamaño de la iterable, alguien podría realmente atasco de las cosas con la listcomp versión.
  3. 2

    Que es lo que join es para.

    ','.join([str(elem) for elem in a])
    • TypeError: sequence item 0: expected string, int found. No funciona para su muestra de entrada.
    • A la derecha, lo siento. No convertir automáticamente los enteros a las cadenas. Fija con una interesante lista de comprensión.
    • No utilice una lista de comprensión. Sacar la []s y va a tener un generador, que funcionará igual de bien sin la creación de un (potencialmente grande) temporales innecesarios de la lista.
  4. 2

    Hay dos opciones ,

    Usted puede imprimir directamente la respuesta usando
    print(*a, sep=',')
    esto va a utilizar como separador de «,» usted va a obtener la respuesta ,

    1,2,3

    y la otra opción es ,

    print(','.join(str(x) for x in list(a)))

    esto va a recorrer la lista y la impresión de un (a) e imprimir la salida como

    1,2,3
  5. 0
    print ','.join(a)
    • join no convertir automáticamente enteros a las cadenas, así que esto no va a funcionar.
    • ¿Esto parece una tontería que no str() automáticamente? Después de todo «.join() es un método de Cadena. Me pregunto por qué no hacerlo de forma gratuita.
    • Va contra el precepto de «Explícito es mejor que la implícita».
  6. -1
     def stringTokenizer(sentense,delimiters):
         list=[]
         word=""
         isInWord=False
         for ch in sentense:
             if ch in delimiters:
                 if isInWord: # start ow word
                     print(word)
                     list.append(word)
                     isInWord=False
             else:
                 if not isInWord: # end of word
                     word=""
                     isInWord=True
                 word=word+ch
         if isInWord: #  end of word at end of sentence
                 print(word)
                 list.append(word)
                 isInWord=False
         return list

    de impresión (stringTokenizer(u»привет парни! я вам стихами, может быть, еще отвечу»,», !»))

    • He reemplazado cadena de ejemplo porque es demasiado ofensivo para el ruso hablado.
  7. -3
    >>> a=[1,2,3]
    >>> a=[str(i) for i in a ]
    >>> s=a[0]
    >>> for i in a[1:-1]: s="%s,%s"%(s,i)
    ...
    >>> s=s+","+a[-1]
    >>> s
    '1,2,3'
    • tengo que asumir que estás bromeando

Dejar respuesta

Please enter your comment!
Please enter your name here