Python字符串匹配功能改造:返回匹配词而非0/1,解决NameError报错
错误原因
你的代码存在三处问题:
- 参数引用错误:你定义的函数参数是
list_of_words,但生成器表达式中写的迭代对象是words,变量名不匹配会抛出名称错误 - 作用域问题:生成器表达式
any(i in string for i in words)中的迭代变量i仅在生成器内部生效,离开表达式后就无法访问,所以if分支中return i自然会报变量未定义的错误 - 依赖问题:如果没有提前导入numpy库,直接返回
np.nan也会抛出名称错误,无匹配场景返回None或者空字符串更通用
修正代码(返回第一个匹配到的词汇,符合你的示例需求)
def lookup2(string, list_of_words): for word in list_of_words: if word in string: return word # 无匹配的返回值可按需调整,比如改成''或者np.nan(需先导入numpy) return None
测试效果:
list_of_words=['pencil','eraser','marker'] print(lookup2('I have a pencil and a pen', list_of_words)) # 输出:'pencil'
拓展实现(返回所有匹配到的词汇)
如果需要返回字符串中所有命中的词汇,可以用列表推导式实现:
def lookup_all(string, list_of_words): return [word for word in list_of_words if word in string]
测试效果:
print(lookup_all('I have a pencil and an eraser', list_of_words)) # 输出:['pencil', 'eraser']
内容的提问来源于stack exchange,提问作者santiagomarind
相关产品推荐
相关产品推荐

