在Python中有一个列表,使用lambda和map/filter来生成新列表



>我有一个列表:

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

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

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

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

但是如果我使用 map 函数,它会将列表返回为真/假:

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

请向上述示例解释地图函数 w.r.t.

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))将λ应用于序列时,您的结果是bools的list


顺便说一句,你也可以把它作为列表理解:

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

这可能会对map()有更多的了解:了解地图函数

最新更新