我正在学习 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
您不应该过滤掉空格和字符
'z'
,而是将它们映射到相同的字符:
result = "".join(map(lambda y : y if y in " z" else chr(ord(y) + 1), sentence))
请参阅此链接,了解您需要做什么的进一步说明。
您可以将 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