如何在Python中打印一个列表“很好”

在PHP中,我可以这样做:

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

在Python中,我现在只是这样做:

 print the_list 

但是,这将导致大量的数据。 有没有什么办法很好地将其打印成可读的树? (有缩进)?

 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是首先想到的; 但是,如果您可以描述示例input和输出(以便不需要学习PHP来帮助您;-),那么我们可以提供更具体的帮助!

在不需要导入pprint情况下进行debugging的快速pprint就是join'\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) 

然后myTextvariables会像PHP var_dumpprint_r 。 检查文档以获取更多选项和参数。

正如其他答案build议pprint模块做的伎俩。
尽pipe如此,在进行debugging的情况下,您可能需要将整个列表放入某个日志文件中,但可能必须使用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)) 

如果您需要直接将其logging到文件,则必须使用stream关键字指定输出stream。 参考

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

看到Stefano Sanfilippo的回答

正如其他答案已经提到, pprint是一个伟大的模块,将做你想做的。 但是,如果您不想导入它,只想在开发过程中打印debugging输出,则可以近似其输出。

一些其他的答案工作正常的string,但如果你尝试与类对象它会给你错误TypeError: sequence item 0: expected string, instance found

对于更复杂的对象,请确保该类有一个__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__方法来获得一个嵌套漂亮的打印forms:

 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] 

不幸的是没有二级缩进,但是对于一个快速的debugging可能是有用的。