我有一个列表:
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.上面的例子
答案 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应用于序列时,结果是bool
个list(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