135

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

如果不是,我的问题是……为什么?如果我们可以用综合列表来做这种事情,为什么不作为一个列表之外的简单语句呢?

4

13 回答 13

262

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

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

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

使用 Python 2.x 上的 print 语句,您将需要某种迭代,关于您关于print(p) for p in myList不工作的问题,您可以使用以下内容,它做同样的事情并且仍然是一行:

for p in myList: print p

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

print '\n'.join(str(p) for p in myList) 
于 2013-04-02T16:27:43.107 回答
29

我经常用这个 :

#!/usr/bin/python

l = [1,2,3,7] 
print "".join([str(x) for x in l])
于 2013-04-02T16:28:06.767 回答
9

[print(a) for a in list]尽管它会打印出所有项目,但最后会给出一堆 None 类型

于 2015-07-08T15:05:49.607 回答
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。看看文档。

于 2013-04-02T16:35:00.710 回答
3

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

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

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

01, 02, 05

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

于 2015-11-18T01:14:39.270 回答
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.')

希望我有所帮助。

于 2017-04-08T12:22:17.890 回答
1

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

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

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

于 2018-04-25T04:50:21.000 回答
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 非常陌生,我敢肯定这对专家来说很笨拙,但我只是在这里举个例子

于 2018-11-29T15:01:30.600 回答
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']

于 2018-10-21T13:33:33.027 回答
0

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

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

答案是,它确实存在,即:

[p for p in myList] #works perfectly

基本上,[]用于列表理解并摆脱print避免打印None。要了解为什么print打印None看到这个

于 2018-11-16T07:15:58.687 回答
0

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

 for i in result: print(i)
于 2020-09-01T23:59:13.403 回答
0

您还可以使用 len() 函数并确定列表的长度以打印元素,如下例所示:

sample_list = ['Python', 'is', 'Easy']

for i in range(0, len(sample_list)):

      print(sample_list[i])

参考:https ://favtutor.com/blogs/print-list-python

于 2021-11-19T05:16:06.473 回答
0

您可以尝试这样做:这也会将其打印为字符串

print(''.join([p for p in myList]))

或者如果你想让它每次打印一些东西时都打印一个换行符

print(''.join([p+'\n' for p in myList]))
于 2022-02-27T23:17:00.347 回答