You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:16:07