【问题标题】:having a list in python,using lambda and map/filter to generate new list在 python 中有一个列表,使用 lambda 和 map/filter 生成新列表
【发布时间】:2018-09-05 17:00:35
【问题描述】:

我有一个清单:

seq = ['soup','dog','salad','cat','great']

根据过滤器的定义,下面的代码获取正确的结果:

list(filter(lambda w: w[0]=='s',seq))

['soup','salad']

即返回仅包含以 's' 开头的单词的列表

但如果我使用地图功能,它会将列表返回为真/假:

list(map(lambda w: w[0]=='s',seq))`

[True, False, True, False, False]

请解释一下 map 函数 w.r.t.到上面的例子

【问题讨论】:

    标签: python python-3.x lambda


    【解决方案1】:

    map 将函数应用于序列并返回生成器。

    例子:

    k = list(map(int,["1","2","3"]))
    

    int() 是一个函数string->int 因此k 变为:

    k ==  [1,2,3] # (a list of ints)
    

    您的 lambda 是一个函数 string->bool,它接受 string 并评估第一个字符是否为 's'

    lambda w: w[0]=='s'
    

    作为string->bool 的函数,当使用list(map(lambda w: w[0]=='s', seq)) 将您的lambda 应用到您的序列时,您的结果是bools 的list


    顺便说一句。您也可以将其作为列表理解来完成:

    s_seq = [x for x in seq if x[0]=='s'] # which is closer to what filter does...
    

    这可能会对map():Understanding the map function 提供更多启示

    【讨论】:

    • 很好的答案。我不知道但非常值得注意的事情。谢谢。
    猜你喜欢
    • 2018-06-27
    • 1970-01-01
    • 2014-08-16
    • 2012-11-25
    • 2020-07-09
    • 2015-01-16
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多