繁体   English   中英

如何将嵌套的if语句转换为lambda函数(Python)

[英]How to convert a nested if statement into a lambda function (python)

对于最近的Python作业,我们被分配来创建一个函数,该函数将返回以'd'开头的列表中的单词。 以下是相关代码:

def filter_words(word_list, letter):
'''
INPUT: list of words, string
OUTPUT: list of words

Return the words from word_list which start with the given letter.

Example:
>>> filter_words(["salumeria", "dandelion", "yamo", "doc loi", "rosamunde",
                  "beretta", "ike's", "delfina"], "d")
['dandelion', 'doc loi', 'delfina']
'''

letter_list = []
for word in word_list:
        if word[0] == letter:
            letter_list.append(word)
return letter_list

上面的嵌套if语句在运行代码时有效,我对此感到很高兴(:D); 但是,在尝试变得更加Python化和精巧的语言时,我找到了一篇非常有用的文章,介绍了为什么Lambda函数很有用以及如何用lambda解决这一难题,但是我不知道如何使它工作在这种情况下。

我正在寻求有关如何将上面的嵌套if语句编写为lambda函数的指南。

在某种程度上,您的if条件的lambda等效项为:

fn = lambda x: x[0] == 'd'  #fn("dog") => True, fn("test") => False

此外,您可以使用.startswith(..)而不是比较[0] 然后变成:

letter_list = filter(lambda x: x.startswith('d'), word_list)

但是更多的pythonic是:

letter_list = [x for x in word_list if x.startswith('d')]

我不确定您要问什么,因为将if更改为某种lambda似乎没有用。 您忽略了发布失败的代码,因此我们知道您想要什么。

但是,有一种简洁的方式来表达您的工作:

def filter_words(word_list, letter):
    return [word in letter_list if word[0] == letter]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM