Pythonic的方式来打印列表项目

我想知道是否有更好的方法来打印Python列表中的所有对象比这个:

myList = [Person("Foo"), Person("Bar")] print("\n".join(map(str, myList))) Foo Bar 

我读这种方式并不是很好:

 myList = [Person("Foo"), Person("Bar")] for p in myList: print(p) 

是不是有这样的东西:

 print(p) for p in myList 

如果不是,我的问题是…为什么? 如果我们可以用全面的列表来做这种事情,那为什么不作为列表之外的简单陈述呢?

假设你正在使用Python 3.x:

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

您可以使用from __future__ import print_function在Python 2.x上获得相同的行为,正如mgilson在注释中指出的那样。

使用Python 2.x上的打印语句,您需要迭代某种types的关于print(p) for p in myList不能正常工作的问题,您可以使用下面的代码来完成同样的事情,它仍然是一行代码:

 for p in myList: print p 

对于使用'\n'.join()的解决scheme,我更喜欢使用'\n'.join()列表'\n'.join()和生成器,所以我可能会使用下面的代码:

 print '\n'.join(str(p) for p in myList) 

我经常用这个 :

 #!/usr/bin/python l = [1,2,3,7] print "".join([str(x) for x in l] ) 

对于Python 2. *:

如果您为Person类重载__str __()函数,则可以省略map(str,…)的部分。 另一种方法是创build一个函数,就像你写的:

 def write_list(lst): for item in lst: print str(item) ... write_list(MyList) 

在Python 3中有* print()函数的参数sep 。 看看文档。

[print(a) for a in list]将在最后给一堆Nonetypes,虽然它打印出所有的项目

扩大@卢卡斯的答案(受到收到评论的启发):

要得到一个格式化的列表输出,你可以按照下面的方法做一些事情:

 l = [1,2,5] print ", ".join('%02d'%x for x in l) 01, 02, 05 

现在", "提供了分隔符(仅在项目之间,不在末尾),格式化string'02d'%x结合,为每个项目x提供一个格式化的string – 在这种情况下,格式化为两位数的整数,剩下的是零。

要显示每个内容,我使用:

 mylist = ['foo', 'bar'] indexval = 0 for i in range(len(mylist)): print(mylist[indexval]) indexval += 1 

在函数中使用的示例:

 def showAll(listname, startat): indexval = startat try: for i in range(len(mylist)): print(mylist[indexval]) indexval = indexval + 1 except IndexError: print('That index value you gave is out of range.') 

希望我帮助。