Как распечатать список в Python "красиво"

В PHP я могу это сделать:

echo '<pre>' print_r($array); echo '</pre>' 

В Python я сейчас просто делаю это:

 print the_list 

Однако это вызовет большой объем данных. Есть ли способ напечатать это красиво в читаемом дереве? (с отступом)?

7 Solutions collect form web for “Как распечатать список в Python "красиво"”

 from pprint import pprint pprint(the_list) 

Вы имеете в виду что-то вроде …:

 >>> 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'] >>> 

…? Из вашего беглого описания, первый модуль библиотеки pprint – это первое, что приходит на ум; однако, если вы можете описать примеры входов и выходов (чтобы вам не нужно было изучать PHP, чтобы помочь вам ;-), мы можем предложить более конкретную помощь!

Быстрое взломать при отладке, которая работает без импорта pprint это присоединиться к списку на '\n' .

 >>> lst = ['foo', 'bar', 'spam', 'egg'] >>> print '\n'.join(lst) foo bar spam egg 

Просто «распакуя» список в аргументе функции печати и используя новую строку (\ n) в качестве разделителя.

print (* lst, sep = '\ n')

 lst = ['foo', 'bar', 'spam', 'egg'] print(*lst, sep='\n') foo bar spam egg 

https://docs.python.org/3/library/pprint.html

Если вам нужен текст (например, для использования с проклятиями):

 import pprint myObject = [] myText = pprint.pformat(myObject) 

Тогда переменная myText будет похожа на php var_dump или print_r . Проверьте документацию на наличие дополнительных параметров, аргументов.

Как показывают другие ответы, модуль pprint выполняет трюк.
Тем не менее, в случае отладки, когда вам может понадобиться разместить весь список в какой-то файл журнала, возможно, придется использовать метод pformat вместе с протоколом модуля вместе с 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)) 

И если вам нужно напрямую зарегистрировать его в файле, нужно указать выходной поток, используя ключевое слово stream. ссылка

 from pprint import pprint with open('output.txt', 'wt') as out: pprint(myTree, stream=out) 

См . Ответ Стефано Санфилиппо

Как и другие ответы, pprint – отличный модуль, который будет делать то, что вы хотите. Однако, если вы не хотите импортировать его и хотите распечатать вывод отладки во время разработки, вы можете приблизиться к его выходным данным.

Некоторые из других ответов отлично подходят для строк, но если вы попробуете их с объектом класса, это даст вам ошибку TypeError: sequence item 0: expected string, instance found .

Для более сложных объектов убедитесь, что класс имеет метод __repr__ который печатает __repr__ информацию о свойствах:

 class Foo(object): def __init__(self, bar): self.bar = bar def __repr__(self): return "Foo - (%r)" % self.bar 

И затем, когда вы хотите распечатать вывод, просто сопоставьте свой список с функцией str как это:

 l = [Foo(10), Foo(20), Foo("A string"), Foo(2.4)] print "[%s]" % ",\n ".join(map(str,l)) 

выходы:

  [Foo - (10), Foo - (20), Foo - ('A string'), Foo - (2.4)] 

Вы также можете делать такие вещи, как переопределение метода list __repr__ чтобы получить форму вложенной довольно печатной:

 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 

дает

 [first, 2, [another, list, here], last] 

К сожалению, нет отступ второго уровня, но для быстрой отладки это может быть полезно.

  • как остановить выполнение в скрипте python?
  • Как пропустить все, кроме последнего элемента списка?
  • Поиск твиттера с Tweepy
  • Перезагрузка модуля дает функциональность, которая изначально не доступна, импортируя ее. где я могу узнать больше об этом?
  • Задание свойства объекта в точечной нотации переменной
  • В Python возможны реальные динамические и анонимные функции?
  • Каков предпочтительный метод использования jinja2 в App Engine?
  • Функция отображения Python, проходящая по ссылке / значению?
  • Python - лучший язык программирования в мире.