在python中有一个列表,使用lambda和map/filter生成新列表
我有一份清单:在python中有一个列表,使用lambda和map/filter生成新列表,python,python-3.x,lambda,Python,Python 3.x,Lambda,我有一份清单: seq = ['soup','dog','salad','cat','great'] 根据过滤器的定义,下面的代码获取正确的结果: list(filter(lambda w: w[0]=='s',seq)) ['soup','salad'] i、 e返回仅包含以's' 但如果我使用的是map函数,它会将列表返回为true/false: list(map(lambda w: w[0]=='s',seq))` [True, False, True, False, False]
seq = ['soup','dog','salad','cat','great']
根据过滤器的定义,下面的代码获取正确的结果:
list(filter(lambda w: w[0]=='s',seq))
['soup','salad']
i、 e返回仅包含以's'
但如果我使用的是map函数,它会将列表返回为true/false:
list(map(lambda w: w[0]=='s',seq))`
[True, False, True, False, False]
请向上述示例解释map函数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
,它接受字符串
,并计算第一个字符是否为's'
:
lambda w: w[0]=='s'
作为string->bool
的函数,当使用list(map(lambda w:w[0]=='s',seq))
将lambda应用于序列时,结果是list
的bool
s
顺便说一句,你也可以这样做:
s_seq = [x for x in seq if x[0]=='s'] # which is closer to what filter does...
这可能会进一步说明
map()
:很好的答案。一些我不知道但非常值得注意的事情。谢谢