我有一个清单:
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]请解释一下map函数w.r.t。到上面的例子
发布于 2018-09-06 01:15:02
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的一个函数,当您使用bool将您的lambda应用于您的序列时,您的结果是一个list(map(lambda w: w[0]=='s', seq))的list。
顺便说一句。你也可以按照列表理解的方式来做:
s_seq = [x for x in seq if x[0]=='s'] # which is closer to what filter does...这可能会让我们更多地了解map():Understanding the map function
https://stackoverflow.com/questions/52190189
复制相似问题