首页 > 解决方案 > 在 python 中有一个列表,使用 lambda 和 map/filter 生成新列表

问题描述

我有一个清单:

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]

请向上面的示例解释地图功能

标签: pythonpython-3.xlambda

解决方案


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

例子:

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

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

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

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

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

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


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

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

这可能会更清楚地说明map()了解地图功能


推荐阅读