Pythonic打印列表项的方法

时间:2013-04-02 16:24:16

标签: python list printing list-comprehension

我想知道是否有更好的方法来打印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

如果没有,我的问题是......为什么?如果我们可以使用综合列表来做这种事情,为什么不作为列表之外的简单陈述呢?

11 个答案:

答案 0 :(得分:188)

假设您使用的是Python 3.x:

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

您可以使用from __future__ import print_function在Python 2.x上获得相同的行为,如mgilson在评论中所述。

使用Python 2.x上的print语句,您将需要某种迭代,关于print(p) for p in myList无法正常工作的问题,您可以使用以下内容执行相同操作但仍然是一行:< / p>

for p in myList: print p

对于使用'\n'.join()的解决方案,我更喜欢map()上的列表推导和生成器,因此我可能会使用以下内容:

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

答案 1 :(得分:26)

我一直都在使用它:

#!/usr/bin/python

l = [1,2,3,7] 
print "".join([str(x) for x in l])

答案 2 :(得分:6)

[print(a) for a in list]尽管打印出所有项目

,但会在最后给出一堆无类型

答案 3 :(得分:3)

对于Python 2。*:

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

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

...

write_list(MyList)

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

答案 4 :(得分:3)

扩展@ lucasg的答案(受到收到的评论的启发):

要获得 格式化 列表输出,您可以按以下方式执行操作:

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

01, 02, 05

现在", "提供了分隔符(仅在项目之间,而不是在结尾处),格式字符串'02d'%x结合使用,为每个项目x提供了格式化字符串 - 在这种情况下,格式化为带两位数的整数,左边用零填充。

答案 5 :(得分:2)

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

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.')

希望我帮助过。

答案 6 :(得分:1)

我认为如果您只想查看列表中的内容,这是最方便的:

myList = ['foo', 'bar']
print('myList is %s' % str(myList))

简单易读,可与格式字符串一起使用。

答案 7 :(得分:1)

OP的问题是:是否存在类似以下内容的问题,如果不存在,为什么

print(p) for p in myList # doesn't work, OP's intuition

答案是,它存在,即:

[p for p in myList] #works perfectly

基本上,使用[]进行列表理解,并摆脱print以避免打印None。要了解为什么print打印None的原因,请参见this

答案 8 :(得分:1)

我最近制作了一个密码生成器,尽管我对python还是很陌生,但我还是想把它作为一种显示列表中所有项目的方式(进行一些小的修改即可满足您的需要...

    x = 0
    up = 0
    passwordText = ""
    password = []
    userInput = int(input("Enter how many characters you want your password to be: "))
    print("\n\n\n") # spacing

    while x <= (userInput - 1): #loops as many times as the user inputs above
            password.extend([choice(groups.characters)]) #adds random character from groups file that has all lower/uppercase letters and all numbers
            x = x+1 #adds 1 to x w/o using x ++1 as I get many errors w/ that
            passwordText = passwordText + password[up]
            up = up+1 # same as x increase


    print(passwordText)

就像我说的那样,即时消息对Python来说非常新,我相信这对于专家来说是笨拙的方式,但是我在这里只是另一个例子

答案 9 :(得分:1)

使用单行代码打印给定列表的每个元素

 for i in result: print(i)

答案 10 :(得分:0)

假设您可以很好地打印列表[1,2,3],那么在Python3中简单的方法是:

mylist=[1,2,3,'lorem','ipsum','dolor','sit','amet']

print(f"There are {len(mylist):d} items in this lorem list: {str(mylist):s}")

运行此命令将产生以下输出:

  

此lorem列表中有8个项目:[1、2、3,'lorem','ipsum',   'dolor','sit','amet']