【问题标题】:lambda funtion returns whole list instead of elementlambda 函数返回整个列表而不是元素
【发布时间】:2016-12-29 13:46:23
【问题描述】:

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

我有一个想要使用 Lambda 过滤的列表,我想从列表中只打印出“Python”:

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

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

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

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

有什么建议吗?

【问题讨论】:

  • 语言[2] 不足以解决这个问题吗?

标签: python list lambda filter


【解决方案1】:

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

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

如果你想要第三个元素,你不应该使用过滤,只选择那个元素:

print languages[2]

如果您想过滤特定值,请更改 lambda 以返回您要从列表中检索的那些值的 True。您可以要求所有以P 开头的值,例如:

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

【讨论】:

  • 所以在过滤器函数中基本上有一个内置的for循环?
  • @DanielBäck:是的,filter() 函数必须遍历输入列表以过滤元素。
【解决方案2】:

你可以这样过滤:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 列表理解似乎要快得多
    猜你喜欢
    • 2022-01-15
    • 2022-12-05
    • 2021-11-19
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2021-10-17
    • 2021-10-04
    • 2011-11-26
    相关资源
    最近更新 更多