需要帮助将列表理解转换为 lambda 函数

问题描述 投票:0回答:2

我正在学习 lambda 函数,遇到了一个问题,该问题实际上应该使用列表理解来解决,但我想知道是否有办法使用 lambda 函数来做同样的事情。

Q - 给定一个句子,返回该句子,其中所有字母都被调换 1 字母表,但前提是字母是 a-y。

我的代码使用列表理解:

sentence = 'the quick brown fox jumps over the lazy dog'
result = "".join([chr(ord(letter) + 1) if letter != "z" and letter != " " else letter for letter in sentence])

这工作正常,但问题是当我尝试使用 lambda 函数时,我无法获得相同的输出。我知道问题是当字母实际上是“z”或“”时,lambda 函数会忽略它,而它应该返回相同的值,但我不知道如何实现这一点。

sentence = 'the quick brown fox jumps over the lazy dog'
result = "".join(map(lambda y : chr(ord(y) + 1),filter(lambda x : x != "z" and x != " ", sentence)))

预期产出 =

uif rvjdl cspxo gpy kvnqt pwfs uif mbzz eph

输出(使用 lambda)=

uifrvjdlcspxogpykvnqtpwfsuifmbzeph

python lambda list-comprehension
2个回答
2
投票

您不应该过滤掉空格和字符

'z'
,而是将它们映射到相同的字符:

result = "".join(map(lambda y : y if y in " z" else chr(ord(y) + 1), sentence))

-1
投票

请参阅此链接,了解您需要做什么的进一步说明。

您可以将 lambda 表达式视为您想要执行的操作的非常详细的英语口语版本,例如:

lambda x: x**2 if x > 3 else 10
将准确返回它所说的内容;如果
x
,则为
x>3
的平方,否则为
10

就您而言,您可以非常简单地表达为:

lambda y: char(ord(y) + 1) if (y is not 'z' or '') else y
© www.soinside.com 2019 - 2024. All rights reserved.