python-3.x - Python 3 中的过滤器/映射/lambda
问题描述
我在使用 Python3 中的 lambda 函数时遇到了一些问题。看看我到目前为止做了什么。
odd_lst = []
for n in range(len(lst)):
if lst[n] % 2 != 0:
odd_lst.append(lst[n]**2)
这是原始代码。我需要使用 filter() 和 map() 将 for 循环语句替换为单行代码。我尝试使用以下行:
odd_lst=list(filter(lambda x: x**2 if (x%2)!=0, lst))
但这给了我一个错误:
odd_lst=list(filter(lambda x: x**2 if (x%2)!=0, lst))
^
SyntaxError: invalid syntax
我对这个概念很陌生。请显示我做错了什么。
解决方案
你的任务是使用filter()
并map()
从输入列表中选择奇数,对这些数字求平方,然后用这些平方生成一个新列表。
所以,假设你已经定义了一个输入lst
,你的第一步是过滤掉奇数:
odds = filter(lambda x: x %2 != 0, lst)
然后你需要得到这些奇数的平方:
squares = map(lambda x: x**2, odds)
然后您需要将这些值放入结果列表中:
odd_lst = list(squares)
现在您可以希望看到如何将所有这些组合成一行:
odd_lst = list(map(lambda x: x**2, filter(lambda x: x %2 != 0, lst)))
希望有帮助
推荐阅读
- postgresql - 从年份和 doy 列创建日期列
- r - plot_grid - 标签不可读,
- javascript - 对 ecma/es5、ecma/es6 感到困惑。我怎么知道我的代码库是什么?
- python - 在 Python 中将 JSON 文件转换为数据框
- xcode - 如何修复 Xcode 中的错误“您无权写入文件“stdio.h”的文件夹?
- android - 在自定义视图组中设置布局参数
- azure - 为事件网格的 API 连接创建 ARM 模板
- aws-code-deploy - 使用 AWS CodeDeploy 从 Amazon S3 自动部署
- maven - 在 aem 项目中添加依赖后出现“无法解析为类型”错误
- oracleclient - 在哪里可以下载适用于 Windows 的 Oracle 11g 客户端安装程序?