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

时间:2009-10-06 04:55:40

标签: python

在PHP中,我可以这样做:

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

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

print the_list

然而,这将导致大量数据。有没有办法将它很好地打印到可读的树中? (有缩进)?

12 个答案:

答案 0 :(得分:123)

from pprint import pprint
pprint(the_list)

答案 1 :(得分:25)

快速破解,而无需导入pprint即可进行调试,可以加入'\n'上的列表。

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

答案 2 :(得分:18)

你的意思是......:

>>> 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以帮助您;-),我们可能会提供更具体的帮助!

答案 3 :(得分:15)

简单地通过&#34;拆包&#34; print函数参数中的列表,并使用换行符(\ n)作为分隔符。

打印(* lst,sep =&#39; \ n&#39;)

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

foo
bar
spam
egg

答案 4 :(得分:2)

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

如果您需要文本(例如,用于使用curses):

import pprint

myObject = []

myText = pprint.pformat(myObject)

然后myText变量类似于php var_dumpprint_r。查看文档以获取更多选项,参数。

答案 5 :(得分:2)

这是我经常使用的原始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

答案 6 :(得分:1)

正如其他答案建议 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))

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

from pprint import pprint

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

请参阅Stefano Sanfilippo's answer

答案 7 :(得分:1)

import json
some_list = ['one', 'two', 'three', 'four']
print(json.dumps(some_list, indent=4))

输出:

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

答案 8 :(得分: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)]

你也可以覆盖__repr__的{​​{1}}方法,以获得嵌套式漂亮打印的形式:

list

给出

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

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

答案 9 :(得分:0)

对于 Python 3 ,我做的事情与shxfee's answer相同:

foo
bar
baz

输出

def print_cols(df):
    print('\n'.join(df.columns))

顺便说一句,我使用类似的辅助函数来快速查看pandas DataFrame中的列

QComboBox::setStyleSheet(
QComboBox::down-arrow {
image: url(:/images/add_support_combo_box.png);
left: -50px;
top: -10px;
width: 500px;
height : 200px;}");

答案 10 :(得分:0)

您还可以循环浏览列表:

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

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

答案 11 :(得分:0)

如果您只想按原样显示列表(带括号),请使用:

print(list(the_list))