En PHP, puedo hacer esto:
echo '<pre>'
print_r($array);
echo '</pre>'
En Python, actualmente solo hago esto:
print the_list
Sin embargo, esto provocará una gran cantidad de datos. ¿Hay alguna forma de imprimirlo bien en un árbol legible? (con sangrías)?
import pprint
?pprint.pprint(the_list)
por lo general es solo una cuestión de preferencia personal. Elegí tener el desorden adicional en la línea de importación en este caso.stream=
, el valor predeterminado es stdout. docs.python.org/3/library/pprint.htmlUn truco rápido durante la depuración que funciona sin tener que importar
pprint
sería unirse a la lista'\n'
.>>> lst = ['foo', 'bar', 'spam', 'egg'] >>> print '\n'.join(lst) foo bar spam egg
fuente
None
.print '\n'.join(map(str, lst))
Simplemente "desempaquetando" la lista en el argumento de la función de impresión y usando una nueva línea (\ n) como separador.
imprimir (* lst, sep = '\ n')
lst = ['foo', 'bar', 'spam', 'egg'] print(*lst, sep='\n') foo bar spam egg
fuente
from __future__ import print_function
Gracias por el comentario.Quieres decir algo como ...:
>>> print L ['this', 'is', 'a', ['and', 'a', 'sublist', 'too'], 'list', 'including', 'many', 'words', 'in', 'it'] >>> import pprint >>> pprint.pprint(L) ['this', 'is', 'a', ['and', 'a', 'sublist', 'too'], 'list', 'including', 'many', 'words', 'in', 'it'] >>>
...? De su descripción superficial, el módulo de biblioteca estándar pprint es lo primero que le viene a la mente; sin embargo, si puede describir entradas y salidas de ejemplo (para que uno no tenga que aprender PHP para poder ayudarlo ;-), es posible que podamos ofrecer ayuda más específica.
fuente
import json some_list = ['one', 'two', 'three', 'four'] print(json.dumps(some_list, indent=4))
Salida:
[ "one", "two", "three", "four" ]
fuente
https://docs.python.org/3/library/pprint.html
Si necesita el texto (para usarlo con maldiciones, por ejemplo):
import pprint myObject = [] myText = pprint.pformat(myObject)
Entonces la
myText
variable será algo similar a phpvar_dump
oprint_r
. Consulte la documentación para más opciones, argumentos.fuente
Como sugieren las otras respuestas, el módulo pprint hace el truco.
No obstante, en caso de depuración donde es posible que deba poner la lista completa en algún archivo de registro, es posible que deba usar el método pformat junto con el registro del módulo junto con pprint.
import logging from pprint import pformat logger = logging.getLogger('newlogger') handler = logging.FileHandler('newlogger.log') formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.WARNING) data = [ (i, { '1':'one', '2':'two', '3':'three', '4':'four', '5':'five', '6':'six', '7':'seven', '8':'eight', }) for i in xrange(3) ] logger.error(pformat(data))
Y si necesita registrarlo directamente en un archivo, tendría que especificar un flujo de salida, utilizando la palabra clave de flujo. Árbitro
from pprint import pprint with open('output.txt', 'wt') as out: pprint(myTree, stream=out)
Vea la respuesta de Stefano Sanfilippo
fuente
Para Python 3 , hago el mismo tipo de cosas que la respuesta de shxfee :
def print_list(my_list): print('\n'.join(my_list)) a = ['foo', 'bar', 'baz'] print_list(a)
que salidas
Como acotación al margen, uso una función auxiliar similar para ver rápidamente columnas en un DataFrame de pandas
def print_cols(df): print('\n'.join(df.columns))
fuente
Como han mencionado otras respuestas,
pprint
es un gran módulo que hará lo que quieras. Sin embargo, si no desea importarlo y solo desea imprimir la salida de depuración durante el desarrollo, puede aproximar su salida.Algunas de las otras respuestas funcionan bien para cadenas, pero si las prueba con un objeto de clase, obtendrá el error
TypeError: sequence item 0: expected string, instance found
.Para objetos más complejos, asegúrese de que la clase tenga un
__repr__
método que imprima la información de propiedad que desea:class Foo(object): def __init__(self, bar): self.bar = bar def __repr__(self): return "Foo - (%r)" % self.bar
Y luego, cuando desee imprimir la salida, simplemente asigne su lista a la
str
función de esta manera:l = [Foo(10), Foo(20), Foo("A string"), Foo(2.4)] print "[%s]" % ",\n ".join(map(str,l))
salidas:
[Foo - (10), Foo - (20), Foo - ('A string'), Foo - (2.4)]
También puede hacer cosas como anular el
__repr__
método delist
para obtener una forma de impresión bonita anidada:class my_list(list): def __repr__(self): return "[%s]" % ",\n ".join(map(str, self)) a = my_list(["first", 2, my_list(["another", "list", "here"]), "last"]) print a
da
[first, 2, [another, list, here], last]
Desafortunadamente, no hay sangría de segundo nivel, pero para una depuración rápida puede ser útil.
fuente
también puede recorrer su lista:
def fun(): for i in x: print(i) x = ["1",1,"a",8] fun()
fuente