lambda funtion返回整个列表而不是元素

时间:2016-12-29 13:46:24

标签: python list lambda filter

我有一个问题,我正在尝试使用Lambda函数从列表中打印出1个特定元素。

我有一个列表,我想使用Lambda进行过滤,我想从列表中仅打印出“Python”:

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

执行时,我将整个列表打印到控制台! 我不知道我在这里做错了什么。

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

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

有什么建议吗?

3 个答案:

答案 0 :(得分:5)

您要求filter()返回第3个字母存在且不为空的所有元素。这对所有元素都是正确的,因此您可以获得整个列表。请记住,过滤器函数应用于过滤列表中的每个元素。来自[filter()功能文档](

  

请注意,如果函数不是filter(function, iterable),则[item for item in iterable if function(item)]等同于None,如果函数是[item for item in iterable if item],则None等同于print languages[2]

如果您想要第3个元素,则不应使用过滤,只需选择一个元素:

lambda

如果要对特定值进行过滤,请更改True以返回要从列表中检索的值的P。您可以要求以print filter(lambda x: x.startswith('P'), languages) 开头的所有值,例如:

{{1}}

答案 1 :(得分:1)

你可以像这样过滤:

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

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

答案 2 :(得分:0)

没有lambda和过滤器的等价物, - > https://docs.python.org/2/library/functions.html#filter

print [lang for lang in languages if lang == 'Python']