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

时间:2018-09-05 17:00:36

标签: python python-3.x lambda

我有一个列表:

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

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

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

['soup','salad']

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

但是如果我使用的是map函数,它将以true / false的形式返回列表:

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

[True, False, True, False, False]

请说明映射函数w.r.t.上面的例子

1 个答案:

答案 0 :(得分: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将lambda应用于序列时,结果是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()Understanding the map function