繁体   English   中英

过滤器使用 lambda function 和 zip

[英]filter using lambda function and zip

我正在尝试检查列表是否为空,使用带有 lambda function 和 zip 的过滤器返回相关描述。

它的工作,但结果并不像预期的那样。

list_of_lists = [ [ ] , [ 'not_empty' ] ]
list_of_desc = [ 'first_list_is_empty' , 'second_list_not_empty' ]

result = list(filter(lambda item : item[1] if not item[0] else '',zip(list_of_lists,list_of_desc )))

result
Out[180]: [([], 'first_list_is_empty')]

不明白为什么它返回元组,我期待'first_list_is_empty',因为我正在切片元组。

这是因为 filter() 不会修改返回的内容,它只使用 lambda 来确定它是否“应该”返回元组。 要清楚:

func = lambda item : item[1] if not item[0] else ''
func = lambda item : bool(item[1] if not item[0] else '')

是完全相同的过滤 function。

要修改返回的内容,请改用内置 map() function。 另请注意,filter() 默认自动删除 False 事物,您不需要 lambda。

func   = lambda item : item[1] if not item[0] else ''
result = list(filter(None,map(func,zip(list_of_lists,list_of_desc))))

暂无
暂无

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

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