2016-12-29 73 views
-3

我遇到了一個問題,我試圖使用Lambda函數從列表中打印出1個特定元素。lambda函數返回整個列表而不是元素

我有一個列表,我想使用lambda來篩選,我想從列表中只打印出「巨蟒」:

languages = ["HTML", "JavaScript", "Python", "Ruby"] 

在執行我得到的印刷,而不是控制檯整個列表! 我看不出我在這裏做錯了什麼。

languages = ["HTML", "JavaScript", "Python", "Ruby"] 

print filter(lambda x: x[2], languages) 

有什麼建議嗎?

+2

是不是語言[2]足夠這件事? – YOBA

回答

5

您要求filter()返回其所有第三個字母存在並且不爲空的元素。對於所有元素都是如此,所以你會得到整個列表。請記住,過濾器函數應用於過濾列表中的每個元素。從[filter()函數文檔(

注意filter(function, iterable)相當於[item for item in iterable if function(item)]如果功能不None[item for item in iterable if item]如果功能None

如果你想第3元,你不應該使用過濾,只需選擇一個元素:

print languages[2] 

如果您想過濾特定值,請更改lambda以返回True以查找要從列表中檢索的值。你可以要求與P開頭的所有值,例如:

print filter(lambda x: x.startswith('P'), languages) 
+0

所以基本上就像內置for循環過濾功能? –

+0

@DanielBäck:是的,filter()函數必須遍歷輸入列表來過濾元素。 –

1

可以篩選這樣的:

languages = ["HTML", "JavaScript", "Python", "Ruby"] 

print filter(lambda x: x=='Python', languages)