在列表的列表中使用filter与lambda实现标题查找功能遇阻
解决find_title函数无返回结果的问题
首先,咱们拆解下你的问题:你的函数逻辑本身是通顺的,但无返回结果大概率是匹配条件不满足,或者你对返回值的预期和实际输出不符,下面一步步来修复:
1. 最可能的原因:传入的title和子列表标题不完全匹配
看你给出的示例列表,每个子列表的第一个元素是带年份的完整标题(比如'Der Vagabund und das Kind (1921)'),如果你调用函数时传入的是不带年份的'Der Vagabund und das Kind',那x[0] == title肯定不成立,自然返回空列表。
修复方案1:确保完全匹配
如果你确实需要匹配带年份的完整标题,调用函数时传入完整字符串即可:
# 调用示例 ls = [['Der Vagabund und das Kind (1921)', 'http://www.imdb.com/title/tt0012349/', 0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], ['Goldrausch (1925)', 'http://www.imdb.com/title/tt0015864/', 0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], ['Metropolis (1927)', 'http://www.imdb.com/title/tt0017136/', 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0]] result = find_title('Der Vagabund und das Kind (1921)', ls) # 此时result会是包含匹配子列表的列表:[[...]]
修复方案2:支持模糊匹配(自动去掉年份)
如果你希望传入不带年份的标题也能匹配,可以修改匹配逻辑,先清理子列表的标题再对比:
def find_title(title, ls): for item in ls: # 提取括号前的标题部分,去掉年份后缀 cleaned_item_title = item[0].split(' (')[0] if cleaned_item_title == title: return item # 没有找到匹配项时返回None return None
调用示例:
result = find_title('Der Vagabund und das Kind', ls) # 此时会直接返回对应的完整子列表
2. 优化函数返回值:返回单个子列表而非列表的列表
你的原函数返回的是list(filter(...)),也就是所有匹配项组成的列表,但通常我们只需要第一个匹配的子列表。用循环遍历的方式更直观,而且直接返回单个子列表(无匹配时返回None),比filter的写法更符合日常使用预期。
额外验证小技巧
如果不确定匹配条件是否生效,可以临时加打印语句,快速定位问题:
def find_title(title, ls): print("传入的目标title:", title) for x in ls: print("当前子列表标题:", x[0]) if x[0] == title: return x return None
内容的提问来源于stack exchange,提问作者Hendrra
相关产品推荐
相关产品推荐

