2009-10-06 88 views
39

在PHP中,我可以這樣做:如何打印在Python 「很好」 列表

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

在Python,我目前只是這樣做:

print the_list 

然而,這會導致大量的數據。有什麼方法將它很好地打印到可讀的樹中? (有縮進)?

回答

92
from pprint import pprint 
pprint(the_list) 
+0

如何打印到一個文件? – Mawg 2016-04-29 10:30:26

+2

爲什麼不使用'import pprint'? – clankill3r 2017-03-08 16:57:25

+7

@ clankill3r,那麼你需要使用'pprint.pprint(the_list)'通常這只是個人喜好的問題。在這種情況下,我選擇在進口生產線上增加雜物。 – 2017-03-09 02:19:40

17

你的意思是這樣...:

>>> 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以幫助您;-),則我們可能會提供更具體的幫助!

14

在不需要導入pprint的情況下進行調試的快速入侵將會加入'\n'的列表。

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

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

如果你需要的文本(與詛咒例如使用):

import pprint 

myObject = [] 

myText = pprint.pformat(myObject) 

然後myText變量的東西都PHP var_dumpprint_r。檢查文檔以獲取更多選項和參數。

11

只需在打印函數參數中「解包」列表並使用換行符(\ n)作爲分隔符即可。

打印(* LST,九月= '\ n')

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

foo 
bar 
spam 
egg 
+0

很好,但不幸的是只能在Python 3中使用。 – 2018-02-08 16:50:42

0

作爲其他的答案提示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)) 

如果你需要直接記錄到一個文件,一個人必須要指定輸出流,使用流關鍵字。 Ref

from pprint import pprint 

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

Stefano Sanfilippo's answer

0

至於其他的答案也提到,pprint是一個偉大的模塊,可以做你想做的。但是,如果您不想導入它並只想在開發過程中打印調試輸出,則可以估算其輸出。

其他一些答案可以很好地適用於字符串,但是如果您嘗試使用類對象,它會給您錯誤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__方法獲取嵌套漂亮的印刷形式:

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] 

遺憾的是沒有第二級縮進,但對於一個快速調試它可以是有用的。