使用 Python 方式打印列表项
- 2024-12-25 08:51:00
- admin 原创
- 106
问题描述:
我想知道是否有比这更好的方法来打印 Python 列表中的所有对象:
myList = [Person("Foo"), Person("Bar")]
print("
".join(map(str, myList)))
Foo
Bar
我读到这种方式确实不太好:
myList = [Person("Foo"), Person("Bar")]
for p in myList:
print(p)
有没有类似的东西:
print(p) for p in myList
如果不是,我的问题是...为什么?如果我们可以使用完整列表来做这种事情,为什么不将其作为列表外的简单语句呢?
解决方案 1:
假设你正在使用 Python 3:
print(*myList, sep='
')
这是一种解包。详细信息请参阅 Python 教程:解包参数列表
您可以使用 在 Python 2 上获得相同的行为from __future__ import print_function
。
使用 Python 2 上的 print 语句时,您将需要某种迭代。关于您关于print(p) for p in myList
不起作用的问题,您可以使用以下命令,它执行相同的操作并且仍然很简单:
for p in myList:
print p
对于使用的解决方案`'
'.join(),我更喜欢列表推导和生成器,
map()`因此我可能会使用以下命令:
print '
'.join(str(p) for p in myList)
解决方案 2:
我一直用这个:
l = [1,2,3,7]
print "".join([str(x) for x in l])
解决方案 3:
[print(a) for a in list]
虽然它会打印出所有的项目,但最后会给出一堆 None 类型
解决方案 4:
对于 Python 2.*:
如果为 Person 类重载函数 __str__(),则可以省略 map(str, ...) 部分。另一种方法是创建一个函数,就像您编写的那样:
def write_list(lst):
for item in lst:
print str(item)
...
write_list(MyList)
Python 3.* 中 print() 函数有参数sep。请查看文档。
解决方案 5:
扩展@lucasg 的答案(受到收到的评论的启发):
要获取格式化的列表输出,您可以执行以下操作:
l = [1,2,5]
print ", ".join('%02d'%x for x in l)
01, 02, 05
现在", "
提供分隔符(仅在项目之间,而不是在末尾)和格式化字符串,'02d'
并为%x
每个项目提供一个格式化的字符串x
- 在本例中,格式化为两位数的整数,左边用零填充。
解决方案 6:
为了显示每个内容,我使用:
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.')
解决方案 7:
使用单行代码打印给定列表的每个元素
for i in result: print(i)
解决方案 8:
您可以尝试这样做:这也会将其打印为字符串
print(''.join([p for p in myList]))
或者如果你想让它每次打印东西时都打印一个换行符
print(''.join([p+'
' for p in myList]))
解决方案 9:
我认为如果你只想查看列表中的内容,这是最方便的:
myList = ['foo', 'bar']
print('myList is %s' % myList)
简单,易读,可与格式字符串一起使用。
解决方案 10:
我最近制作了一个密码生成器,尽管我对 Python 很陌生,但我还是将其作为一种在列表中显示所有项目的方法(进行了一些小的编辑以满足您的需要...
x = 0
up = 0
passwordText = ""
password = []
userInput = int(input("Enter how many characters you want your password to be: "))
print("
") # 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 很陌生,我确信这对专家来说太笨重了,但我在这里只是想举另一个例子
解决方案 11:
OP 的问题是:是否存在类似以下的情况,如果不存在,那么为什么
print(p) for p in myList # doesn't work, OP's intuition
答案是,它确实存在,即:
[p for p in myList] #works perfectly
基本上,使用[]
列表理解并摆脱print
避免打印None
。要了解为什么print
打印,None
请参阅此
解决方案 12:
您还可以使用 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
解决方案 13:
假设您对打印列表 [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', 'sit', 'amet']