[英]A confusion about creating lambda function with filter function in python
这是问题的提示:
使用zip和filter编写代码,以便将所有提供的列表组合成一个大列表,如果它们的长度均超过 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.