Pythonic 打印列表项的方法
Posted
技术标签:
【中文标题】Pythonic 打印列表项的方法【英文标题】:Pythonic way to print list items 【发布时间】:2013-03-24 01:12:42 【问题描述】:我想知道是否有比这更好的方法来打印 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
如果不是,我的问题是……为什么?如果我们可以用综合列表来做这种事情,为什么不作为一个列表之外的简单语句呢?
【问题讨论】:
您从哪里得到使用for p in myList
“不太好”的印象?
@JonClements : chrisarndt.de/talks/rupy/2008/output/slides.html
@Guillaume 你确定吗?有一张幻灯片显示“尽可能使用in
。好:for key in d: print key
”。链接已经死了,所以这里是an archive link。
【参考方案1】:
假设您使用的是 Python 3.x:
print(*myList, sep='\n')
您可以使用from __future__ import print_function
在 Python 2.x 上获得相同的行为,正如 mgilson 在 cmets 中所指出的那样。
使用 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)
【讨论】:
如果没有,您可以在 python2.6 及更高版本上from __future__ import print_function
。
在 python 2x 中使用 map 比在列表理解上使用 join 稍快。
为什么投反对票,真的是因为map()
和发电机之间的速度差异吗? Python's creator also happens to prefer comprehensions and generators over map()
.
我没有给你投反对票。我熟悉 GVR 的那篇文章,当时他的说法是,python 的未来版本不会包含它,但他们最终留下了。
他们确实停留在 Python 3.x 中,但他在那篇文章中的观点是 [F(x) for x in S]
比 map(F, S)
更清楚。那里没有解决性能问题,但我希望速度差异可以忽略不计。无论如何,我只是对否决票感到困惑,对不起,我以为是你!【参考方案2】:
我一直用这个:
#!/usr/bin/python
l = [1,2,3,7]
print "".join([str(x) for x in l])
【讨论】:
若要添加format()
,请将str(x)
替换为格式字符串:print " ".join([":02d".format(x) for x in l])
【参考方案3】:
[print(a) for a in list]
会在最后给出一堆 None 类型,尽管它会打印出所有项目
【讨论】:
这是我迄今为止一直在使用的。这是一行,非常清晰和富有表现力,但 linter 抱怨“Expression is assigned to nothing” 如果你想拖钓 linter,你可以创建一个单独的函数来打印它并返回一些愚蠢的值,然后在列表理解中调用该函数【参考方案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.')
希望我能帮上忙。
【讨论】:
请注意,请检查您上面的答案。您使用了一个范围,它提供了一个索引值 i,但您使用另一个变量 indexval 作为您的索引?您正在与 python 的简单性作斗争。 for val in my_list: print val 和你所拥有的一样【参考方案7】:如果你只想查看列表中的内容,我认为这是最方便的:
myList = ['foo', 'bar']
print('myList is %s' % str(myList))
简单易读,可与格式字符串配合使用。
【讨论】:
【参考方案8】:我最近制作了一个密码生成器,虽然我对 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,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', '坐', 'amet']
【讨论】:
【参考方案10】: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
【讨论】:
【参考方案11】:使用单行代码打印给定列表的每个元素
for i in result: print(i)
【讨论】:
【参考方案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
【讨论】:
以上是关于Pythonic 打印列表项的方法的主要内容,如果未能解决你的问题,请参考以下文章