如何在 Python 中“漂亮地”打印列表

在 PHP 中,我可以这样做:

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

在 Python 中,我目前只是这样做:

print the_list

然而,这将导致大量的数据。有什么办法可以把它很好地打印到一个可读的树中吗?(与缩进) ?

219966 次浏览
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']
>>>

...?从您的粗略描述,标准库模块 印刷品是第一个想到的事情; 然而,如果您可以描述示例输入和输出(这样就不必为了帮助您而学习 PHP; ——) ,我们也许可以提供更具体的帮助!

在不需要导入 pprint的情况下进行调试的一个快速方法是加入 '\n'上的列表。

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

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

如果您需要文本(例如用于与诅咒一起使用) :

import pprint


myObject = []


myText = pprint.pformat(myObject)

然后 myText变量将类似于 php var_dumpprint_r。查看文档了解更多选项、参数。

只需“解压缩”print 函数参数中的列表,并使用换行符(n)作为分隔符。

Print (* lst,sep =’n’)

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


foo
bar
spam
egg

正如其他答案表明 印刷品模块可以做到这一点。
尽管如此,在进行调试时,您可能需要将整个列表放入某个日志文件中,可能必须使用 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))

如果您需要将其直接记录到 File,则必须使用 stream 关键字指定输出流。裁判

from pprint import pprint


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

参见 Stefano Sanfilippo 的回答

正如其他答案所提到的,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]

不幸的是,没有二级缩进,但对于快速调试,它可能是有用的。

对于 巨蟒3,我和 Shxfee 的回答做同样的事情:

def print_list(my_list):
print('\n'.join(my_list))


a = ['foo', 'bar', 'baz']
print_list(a)

输出

foo
bar
baz

另外,我使用了一个类似的 helper 函数来快速查看熊猫 DataFrame 中的列

def print_cols(df):
print('\n'.join(df.columns))
import json
some_list = ['one', 'two', 'three', 'four']
print(json.dumps(some_list, indent=4))

产出:

[
"one",
"two",
"three",
"four"
]

你也可以遍历你的列表:

def fun():
for i in x:
print(i)


x = ["1",1,"a",8]
fun()

这是我经常使用的一个来自原始 python 的方法!

代码如下:

list = ["a", "b", "c", "d", "e", "f", "g"]


for i in range(len(list)):
print(list[i])

产出:

a
b
c
d
e
f
g