对于最近的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);然而,在尝试使用该语言变得更加pythonic和精明,我发现了一篇非常有用的文章why Lambda functions are useful以及如何用lambda解决同样的挑战,但我无法弄清楚如何让它工作在这种情况下。
我正在寻求有关如何将我的上述嵌套if语句写为lambda函数的指导。
答案 0 :(得分:5)
在某种程度上,你的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')]
答案 1 :(得分:1)
我不确定你在问什么,因为将 if 更改为某种lambda似乎没有用。你忽略了发布失败的代码,所以我们知道你想要什么。
但是,有一种简洁的方式来表达你正在做的事情:
def filter_words(word_list, letter):
return [word in letter_list if word[0] == letter]