Python Lambda函数替换tally后无法遍历列表,求含最多a/A的单词问题
问题:用Lambda函数替代tally时返回首个元素而非预期结果
需求是从列表中返回包含最多大小写字母A(a/A)的单词,示例列表:
# sample list of items -- notice 'armchair' has the max a's items = ['pillow', 'armchair', 'aloegel', 'hammer']
已编写通用函数maxa,用于基于计数返回符合最大值的元素(其中tally是功能正常的计数函数):
def maxa(tally, items): mylist = [(tally(word), word) for word in items] return max(mylist, key = lambda x : x[0])[1]
尝试用Lambda函数替代tally时,调用代码如下,但返回首个单词'pillow'而非预期的'armchair':
maxa(lambda x : sum(letter in ('a', 'A') for letter in word), items)
解答
你的问题出在Lambda函数的变量引用错误:Lambda里误用了外部变量word,而非参数x。
在maxa函数中,遍历items时会把每个单词作为参数传给tally(也就是你定义的Lambda),所以Lambda的参数x才是当前需要计数的单词。但你现在的Lambda里遍历的是word(大概率是笔误或残留变量),导致所有单词的计数结果完全相同,max函数就会默认返回列表中的第一个元素。
修正后的调用代码:
maxa(lambda x : sum(letter in ('a', 'A') for letter in x), items)
修改后,Lambda会正确使用传入的参数x(即当前遍历的单词)进行计数,maxa就能找到'armchair'这个包含最多a/A的单词。
内容的提问来源于stack exchange,提问作者gaurav8936
相关产品推荐
相关产品推荐

