2016-12-29 76 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)