python - 在 python 中有一个列表,使用 lambda 和 map/filter 生成新列表
问题描述
我有一个清单:
seq = ['soup','dog','salad','cat','great']
根据过滤器的定义,下面的代码获取正确的结果:
list(filter(lambda w: w[0]=='s',seq))
['soup','salad']
即返回仅包含以开头的单词的列表's'
但如果我使用地图函数,它会将列表返回为真/假:
list(map(lambda w: w[0]=='s',seq))`
[True, False, True, False, False]
请向上面的示例解释地图功能
解决方案
map
将函数应用于序列并返回生成器。
例子:
k = list(map(int,["1","2","3"]))
int()
是一个函数,string->int
因此k
变为:
k == [1,2,3] # (a list of ints)
您的 lambda 是一个函数string->bool
,它接受 astring
并评估第一个 char 是否为's'
:
lambda w: w[0]=='s'
作为 的函数,当用于将 lambda 应用于您的序列时string->bool
,您的结果是list
s 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()
:了解地图功能
推荐阅读
- datetime - 字符串 '2019-04-01' 未被识别为有效的日期时间。或者如果尝试将其解析为 DateTime,则总是得到“假”
- powershell - 使用 PowerShell 更新 Azure DevOps 中的服务挂钩
- azure-devops - 是否可以在 PROJECTS 之间克隆变量组?
- java - 运行可执行jar
- python - 无法在 Django 休息更新视图中获取实例值
- azure-cognitive-services - 表单识别器的语言支持
- c++ - 防止组合框被关闭
- javascript - 使用 Async/await 函数和 npm-mysql 获取查询对象而不是结果
- azure - Azure 应用服务 - docker-compose 文件问题
- linux - 为什么 mv --backup 在 CentOS 7 上不起作用?