我想知道是否有比这更好的方法来打印 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:
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)
我一直用这个:
#!/usr/bin/python
l = [1,2,3,7]
print "".join([str(x) for x in l])
[print(a) for a in list]
会在最后给出一堆 None 类型,尽管它会打印出所有项目
对于 Python 2.*:
如果你为你的 Person 类重载函数 __str__() ,你可以省略 map(str, ...) 的部分。另一种方法是创建一个函数,就像你写的那样:
def write_list(lst):
for item in lst:
print str(item)
...
write_list(MyList)
Python 3.* 中有 print() 函数的参数 sep。看看文档。
扩展@lucasg 的答案(受其收到的评论启发):
要获得 formatted 列表输出,您可以按照以下方式做一些事情:
l = [1,2,5]
print ", ".join('%02d'%x for x in l)
01, 02, 05
现在
", "
提供分隔符(仅在项目之间,而不是末尾)和格式化字符串 '02d'
结合 %x
为每个项目提供格式化字符串 x
- 在这种情况下,格式化为整数有两个数字,左边用零填充。
如果只是想看列表里的内容,我觉得这个最方便:
myList = ['foo', 'bar']
print('myList is %s' % myList)
简单易读,可与格式字符串一起使用。
要显示每个内容,我使用:
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.')
使用单行代码打印给定列表的每个元素
for i in result: print(i)
您可以尝试这样做:这也会将其打印为字符串
print(''.join([p for p in myList]))
或者如果你想让它在每次打印东西时打印一个换行符
print(''.join([p+'\n' for p in myList]))
假设您可以打印列表 [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']
我最近做了一个密码生成器,虽然我对 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 的新手,我相信这对于专家来说是笨拙的方式,但我只是在这里举另一个例子
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
您还可以使用 len() 函数并确定列表的长度以打印元素,如下例所示:
sample_list = ['Python', 'is', 'Easy']
for i in range(0, len(sample_list)):
print(sample_list[i])