首页 > 解决方案 > 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

我对这个概念很陌生。请显示我做错了什么。

标签: python-3.xlambda

解决方案


你的任务是使用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)))

希望有帮助


推荐阅读