2011-03-26 18 views
61

así que tengo una lista:¿Cómo imprimir "correctamente" una lista?

['x', 3, 'b']

Y quiero que la salida sea:

[x, 3, b]

¿Cómo se puede hacer esto en Python?

Si hago str(['x', 3, 'b']), obtengo una con las comillas, pero no quiero las comillas.

Respuesta

131
mylist = ['x', 3, 'b'] 
print '[%s]' % ', '.join(map(str, mylist)) 
+4

Gracias que funciona muy bien. ¿Puedes explicar un poco en detalle qué estás haciendo en la segunda línea? Soy nuevo en Python. – Obaid

+16

Está usando la función 'map' para llamar' str' para cada elemento de 'mylist', creando una nueva lista de cadenas que luego une en una cadena con' str.join'. Luego, usa el operador de formato de cadena '%' para sustituir la cadena en lugar de '% s' en' "[% s]" '. –

+5

Otra forma de hacerlo es quizás un poco más moderno: '" [{0}] ". Format (", ".join (str (i) para i en mylist))' –

2

Aquí hay una sesión interactiva que muestra algunos de los pasos en @ one-liner de TokenMacGuy. Primero usa la función map para convertir cada elemento de la lista en una cadena (en realidad, está haciendo una nueva lista, sin convertir los elementos en la lista anterior). Luego usa el método de cadena join para combinar esas cadenas con ', ' entre ellas. El resto es solo el formato de cadenas, lo cual es bastante sencillo. (Editar: esta instancia es sencilla; el formato de cadenas en general puede ser algo complejo.)

Tenga en cuenta que usar join es una manera simple y eficiente de crear una cadena a partir de varias subcadenas, mucho más eficiente que hacerlo al agregar sucesivamente cadenas a cadenas, lo que implica una gran cantidad de copias detrás de las escenas.

>>> mylist = ['x', 3, 'b'] 
>>> m = map(str, mylist) 
>>> m 
['x', '3', 'b'] 
>>> j = ', '.join(m) 
>>> j 
'x, 3, b' 
8

En lugar de utilizar map, me gustaría recomendar el uso de un generador de expresión con la capacidad de join a aceptar un iterador:

def get_nice_string(list_or_iterator): 
    return "[" + ", ".join(str(x) for x in list_or_iterator) + "]" 

Aquí, join es una función miembro de la clase string str. Toma un argumento: una lista (o un iterador) de cadenas, luego devuelve una nueva cadena con todos los elementos concatenados, en este caso, ,.

+2

Una buena optimización para Python 2, ya que map devuelve una lista en 2.x. Devuelve un generador en 3.x, por lo que no ayuda mucho allí. –

+6

Me gustaría devolver '' "," .join (str (x) para x en list_or_iterator) .join ('[]') '' – eyquem

+0

@eyquem: Inteligente, no he visto unirse usado así antes. Aún así, eso es un poco más opaco para un principiante (ya que está usando la propiedad de que una cadena es un contenedor iterable de cadenas de un carácter). –

10

Si está utilizando python3:

print('[',end='');print(*L, sep=', ', end='');print(']') 
+1

¿Qué hace la impresión (* L) aquí? – sandeeps

+1

@sandeeps: ver https://docs.python.org/3/reference/expressions.html#calls – Kabie

+0

¡Gracias por compartir el enlace! – sandeeps

6

Puede eliminar todos los caracteres no deseados de una cadena usando su translate() method con None para el argumento table seguido de una cadena que contiene el carácter (s) que desea eliminar para su argumento deletechars.

lst = ['x', 3, 'b'] 

print str(lst).translate(None, "'") 

# [x, 3, b] 

Si está utilizando una versión de Python 2.6 antes, tendrá que utilizar la función del módulo stringtranslate() lugar debido a que la capacidad de pasar None como argumento table no se añadió hasta que Python 2.6 . El uso que tiene este aspecto:

import string 

print string.translate(str(lst), None, "'") 

usando la función string.translate() también trabajará en 2.6+, lo que su uso podría ser preferible.

+1

Alas: '' lst = ["no es", 3, 'b'] '' ==> '' ["it isnt", 3, b] '' y también con '' lst = ['it isn \ 't', 3, 'b'] ' – eyquem

+0

@eyquem: Sí, evitar la eliminación de caracteres que en realidad son parte de sus datos (en lugar de ser estrictamente utilizados para delimitarlos) requeriría naturalmente un poco más de detalle/lógica diferente si es una posibilidad. – martineau

7

Este es un código simple, por lo que si es nuevo, debe comprenderlo con suficiente facilidad.

mylist = ["x", 3, "b"] 
    for items in mylist: 
     print(items) 

Imprime todas ellas sin comillas, como usted quería.

5

Usando sólo de impresión:

>>> l = ['x', 3, 'b'] 
>>> print(*l, sep='\n') 
x 
3 
b 
>>> print(*l, sep=', ') 
x, 3, b 
1

Usando .format de formato de cadenas,

mylist = ['x', 3, 'b'] 
print("[{0}]".format(', '.join(map(str, mylist)))) 

Salida:

[x, 3, b] 

Explicación:

  1. map se utiliza para asignar cada elemento de la lista para string tipo.
  2. Los elementos se unen en una cadena con , como separador.
  3. Utilizamos [ y ] en la declaración de impresión para mostrar las llaves de lista.

Referencia: .format for string formatting PEP-3101

Cuestiones relacionadas