# the legendary Y combinator makes it possible
# to let nameless functions recurse using an indirection
Y = lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))
# our iterator lambda
it = lambda f: lambda Lst: (Lst[0], f(Lst[1:])) if Lst else None
# see it in action:
Y(it)([1,2,3])
=> (1, (2, (3, None)))
使用普通的
lambda
来迭代Python中的任何内容听起来都非常错误。当然,迭代序列和集合的最python方法是使用列表理解和生成表达式,比如@Andrey presented。如果面试官依赖于更具理论性/计算机科学性的答案,那么值得注意的是,使用lambdas迭代是非常有可能的,尽管我必须强调,这不是python,也不适用于学术练习以外的任何环境:
您可以使用lambda循环dict,如下所示:
你不能用
lambda
迭代。在Python中迭代iterable对象的方法如下:for
语句(您的答案)[x for x in y]
、字典{key: value for key, value in x}
和集合{x for x in y}
(x for x in y)
map
,all
,itertools
模块)next
函数,直到发生StopIteration
。注意:3不会迭代它,除非您稍后在生成器上迭代。如果是4,则取决于函数。
对于像dict或list这样的迭代特定集合,可以有更多的技术,比如
while col: remove element
或使用索引切片技巧。现在
lambda
进入画面。您可以在其中一些函数中使用lambdas,例如:map(lambda x: x*2, [1, 2, 3])
。但这里的lambda与迭代过程本身无关,您可以传递一个正则函数map(func, [1, 2, 3])
。相关问题 更多 >
编程相关推荐