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.')
希望我帮助。