Python:使用Map/Lambda替代for循环
我该如何使用下面的代码,结合map和lambda函数呢?
for i in range(1,11):
print "*" * i
如何用map和lambda函数来实现相同的功能?
map(lambda x:print "*"*x ,range(1,11))
4 个回答
为什么不呢?
print '\n'.join([str("*" * i) for i in range(1, 11)])
直接用列表推导式把这些行连接起来,用换行符分隔就行了。
补充说明
处理问题的方法有很多种。在这个情况下,任何一种解决方案都可以。Python 对列表推导式进行了优化。而且,Python 的创始人 Guido van Rossum 非常不喜欢使用 map、filter 和 reduce 这些函数……
他也不喜欢 lambda 函数……举个例子 http://www.python-course.eu/python3_lambda.php
如果 Python 的创始人 Guido van Rossum 能够按照自己的意愿来,这一章在我们的教程中就不会出现。在他2005年5月的文章《所有与 Python 相关的事:reduce() 在 Python 3000 中的命运》中,他解释了为什么要去掉 lambda、map()、filter() 和 reduce()。他预料到来自 Lisp 和 Scheme 的“朋友们”会有反对意见,但没想到这种反对会如此强烈。结果,Guido van Rossum 在不到一年后就写道:“经过这么多次尝试寻找 lambda 的替代方案,也许我们应该承认失败。我没有时间去关注最近的讨论,但我建议我们保留 lambda,以免浪费大家的才华和时间在一个不可能的追求上。”
我们可以看到结果:lambda、map() 和 filter() 仍然是 Python 的核心部分。只有 reduce() 被移除了,转到了 functools 模块中。
总结一下 - 不要试图把一种语言当作另一种语言来使用。
使用
print('\n'.join(map(lambda x: "*"*x, range(1,11))))
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实只要理解了基本的概念,就能更容易地找到解决办法。
比如说,当你在写代码时,可能会用到一些特定的命令或函数。这些命令就像是给计算机下达的指令,告诉它该做什么。有时候,这些指令可能会因为某些原因而出错,这就需要我们去查找原因。
在网上,有很多人会分享他们遇到的问题和解决方案,这就是我们常说的“问答社区”。在这些地方,你可以看到别人是怎么解决类似问题的,甚至可以找到一些很有用的技巧和建议。
总之,编程过程中遇到问题是很正常的,关键是要保持耐心,善于寻找信息,并不断学习。
print('\n'.join(map(lambda x: "*"*x, range(1,11))))
from __future__ import print_function
map(lambda x:print("*"*x) ,range(1,11))
这个在 Python 2.7 中可以运行。