首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有一个python格式的列表,使用lambda和map/filter来生成新的列表

有一个python格式的列表,使用lambda和map/filter来生成新的列表
EN

Stack Overflow用户
提问于 2018-09-06 01:00:36
回答 1查看 44关注 0票数 1

我有一个清单:

代码语言:javascript
复制
seq = ['soup','dog','salad','cat','great']

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

代码语言:javascript
复制
list(filter(lambda w: w[0]=='s',seq))

['soup','salad']

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

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

代码语言:javascript
复制
list(map(lambda w: w[0]=='s',seq))`

[True, False, True, False, False]

请解释一下map函数w.r.t。到上面的例子

EN

回答 1

Stack Overflow用户

发布于 2018-09-06 01:15:02

map将一个函数应用于序列并返回一个生成器。

示例:

代码语言:javascript
复制
k = list(map(int,["1","2","3"]))

int()是一个string->int函数,因此k变成了:

代码语言:javascript
复制
k ==  [1,2,3] # (a list of ints)

您的lambda是一个函数string->bool,它接受一个string并计算第一个字符是否为's'

代码语言:javascript
复制
lambda w: w[0]=='s'

作为string->bool的一个函数,当您使用bool将您的lambda应用于您的序列时,您的结果是一个list(map(lambda w: w[0]=='s', seq))list

顺便说一句。你也可以按照列表理解的方式来做:

代码语言:javascript
复制
s_seq = [x for x in seq if x[0]=='s'] # which is closer to what filter does...

这可能会让我们更多地了解map()Understanding the map function

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52190189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档