簡體   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