Pythonic 方式打印列表项

问题描述 投票:0回答:13

我想知道是否有比这更好的方法来打印 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 list printing list-comprehension
13个回答
276
投票

假设您使用的是 Python 3:

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

这是一种开箱。 Python 教程中的详细信息:Unpacking Argument Lists

您可以使用

from __future__ import print_function
在 Python 2 上获得相同的行为。

使用 Python 2 上的 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) 

30
投票

我一直用这个:

#!/usr/bin/python

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

8
投票

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


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。看看文档。


3
投票

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

要获得 formatted 列表输出,您可以按照以下方式做一些事情:

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

01, 02, 05

现在

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


1
投票

如果只是想看列表里的内容,我觉得这个最方便:

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

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


1
投票

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

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

0
投票

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

 for i in result: print(i)

0
投票

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

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

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

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

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: {mylist}")

运行它会产生以下输出:

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


0
投票

我最近做了一个密码生成器,虽然我对 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 的新手,我相信这对于专家来说是笨拙的方式,但我只是在这里举另一个例子


-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


-1
投票

您还可以使用 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

© www.soinside.com 2019 - 2024. All rights reserved.