>我有一个列表:
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))
将λ应用于序列时,您的结果是bool
s的list
。
顺便说一句,你也可以把它作为列表理解:
s_seq = [x for x in seq if x[0]=='s'] # which is closer to what filter does...
这可能会对map()
有更多的了解:了解地图函数