繁体   English   中英

关于在 python 中使用 filter 函数创建 lambda 函数的困惑

[英]A confusion about creating lambda function with filter function in python

这是问题的提示:

使用zipfilter编写代码,以便将所有提供的列表组合成一个大列表,如果它们的长度均超过 3 个字符,则分配给变量“larger_than_3”。

l1 = ['left', 'up', 'front']

l2 = ['right', 'down', 'back']

我可以通过以下代码行来解决这个问题:

larger_than_3 = list(filter(lambda x: len(x[0]) > 3 and len(x[1]) > 3, list(zip(l1, l2))))

我知道这里的 python 解释器将 x 视为一个元组并使用 [] 分别访问原始列表中的每个元素。 因为 lambda 只接受一个参数作为输入,所以我还创建了以下代码:

l_lst = list(zip(l1, l2))       
larger_than_3 = list(filter(lambda (a,b): len(a)>3 and len(b)>3, l_lst))

但是python说这行代码是无效的语法。 我不太明白为什么它是错误的,因为 lambda 函数可以接受一个元组作为它的参数。

这是一个语法错误,lambda 函数可以接受多个变量

lambda a,b: print(a,b)

但在这种情况下,实际上没有必要,因为数据通过过滤器传递给 lambda 的方式,将其重写为:

larger_than_3 = list(filter(lambda a: len(a[0])>3 and len(a[1])>3, l_lst))

使其功能与第一部分相同! 因为 a 被设置为列表中的每个项目,所以 l_list 中的 a = ('left','right') 所以我们可以索引它并获得预期的输出!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM