Em PHP, posso fazer isso:
echo '<pre>'
print_r($array);
echo '</pre>'
Em Python, atualmente faço apenas isso:
print the_list
No entanto, isso causará uma grande quantidade de dados. Existe alguma maneira de imprimi-lo bem em uma árvore legível? (com recuos)?
import pprint
?pprint.pprint(the_list)
geralmente é apenas uma questão de preferência pessoal. Eu escolhi ter a desordem extra na linha de importação neste caso.stream=
, o padrão é stdout. docs.python.org/3/library/pprint.htmlUm hack rápido durante a depuração que funciona sem a necessidade de importar
pprint
seria entrar na lista'\n'
.>>> lst = ['foo', 'bar', 'spam', 'egg'] >>> print '\n'.join(lst) foo bar spam egg
fonte
None
.print '\n'.join(map(str, lst))
Simplesmente "descompactando" a lista no argumento da função de impressão e usando uma nova linha (\ n) como separador.
imprimir (* lst, sep = '\ n')
lst = ['foo', 'bar', 'spam', 'egg'] print(*lst, sep='\n') foo bar spam egg
fonte
from __future__ import print_function
Obrigado pelo comentário.Você quer dizer 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'] >>>
...? A partir de sua descrição superficial, pprint de módulo de biblioteca padrão é a primeira coisa que vem à mente; entretanto, se você puder descrever entradas e saídas de exemplo (para que não seja necessário aprender PHP para ajudá-lo ;-), pode ser possível para nós oferecer uma ajuda mais específica!
fonte
import json some_list = ['one', 'two', 'three', 'four'] print(json.dumps(some_list, indent=4))
Resultado:
[ "one", "two", "three", "four" ]
fonte
https://docs.python.org/3/library/pprint.html
Se você precisar do texto (para usar com maldições, por exemplo):
import pprint myObject = [] myText = pprint.pformat(myObject)
Então a
myText
variável será algo parecido com phpvar_dump
ouprint_r
. Verifique a documentação para mais opções, argumentos.fonte
Como as outras respostas sugerem, o módulo pprint resolve o problema.
No entanto, no caso de depuração onde você pode precisar colocar a lista inteira em algum arquivo de log, pode ser necessário usar o método pformat junto com o log do módulo junto com o 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))
E se você precisar registrá-lo diretamente em um arquivo, será necessário especificar um fluxo de saída, usando a palavra-chave stream. Ref
from pprint import pprint with open('output.txt', 'wt') as out: pprint(myTree, stream=out)
Veja a resposta de Stefano Sanfilippo
fonte
Para Python 3 , faço o mesmo tipo de coisa que a resposta de shxfee :
def print_list(my_list): print('\n'.join(my_list)) a = ['foo', 'bar', 'baz'] print_list(a)
quais saídas
Como um aparte, eu uso uma função auxiliar semelhante para ver rapidamente as colunas em um DataFrame pandas
def print_cols(df): print('\n'.join(df.columns))
fonte
Como outras respostas mencionaram,
pprint
é um ótimo módulo que fará o que você quiser. No entanto, se você não deseja importá-lo e deseja apenas imprimir a saída de depuração durante o desenvolvimento, você pode aproximar sua saída.Algumas das outras respostas funcionam bem para strings, mas se você tentar com um objeto de classe, receberá o erro
TypeError: sequence item 0: expected string, instance found
.Para objetos mais complexos, certifique-se de que a classe tenha um
__repr__
método que imprima as informações de propriedade que você deseja:class Foo(object): def __init__(self, bar): self.bar = bar def __repr__(self): return "Foo - (%r)" % self.bar
E então, quando você quiser imprimir a saída, simplesmente mapeie sua lista para a
str
função como esta:l = [Foo(10), Foo(20), Foo("A string"), Foo(2.4)] print "[%s]" % ",\n ".join(map(str,l))
saídas:
[Foo - (10), Foo - (20), Foo - ('A string'), Foo - (2.4)]
Você também pode fazer coisas como substituir o
__repr__
método delist
para obter uma forma de impressão bonita aninhada: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
dá
[first, 2, [another, list, here], last]
Infelizmente, nenhum recuo de segundo nível, mas para uma depuração rápida, pode ser útil.
fonte
você também pode percorrer sua lista:
def fun(): for i in x: print(i) x = ["1",1,"a",8] fun()
fonte