如何正确检测Python列表内是否存在指定子字符串
问题根因
'word2' in my_list返回False是符合语法逻辑的:对列表直接使用in运算符时,只会检查列表的顶层元素是否和目标值完全相等,不会深入到每个字符串元素的内部做子串匹配。
你的列表三个顶层元素为'word1,word2,word3'、'g1,g2'、'word1',没有任何一个元素和字符串'word2'完全相等,因此返回False。
可行实现方案
根据匹配精度要求选对应写法即可:
模糊子串匹配:只要任意元素里包含目标字符串就算命中
用any()做短路遍历,只要找到第一个命中项就会停止遍历,性能最优:my_list = ['word1,word2,word3', 'g1,g2', 'word1'] target = 'word2' exist = any(target in item for item in my_list) # exist值为True注意:这种写法会把
'word22'、'aword2b'这类包含word2字符片段的内容也判定为命中。精确词组匹配:仅当目标是逗号分隔的独立词组时才算命中
如果你的列表元素都是逗号拼接的独立词组,需要避免子串误判,可以先对每个元素做拆分再匹配:exist = any( target in item.split(',') for item in my_list )这种写法下,只有元素拆分后存在和
word2完全相等的片段才会返回True,不会出现模糊匹配的误判问题。提取所有命中项:如果需要拿到所有匹配到的内容,可以直接用列表推导式筛选:
# 模糊匹配取所有命中元素 match_items = [item for item in my_list if target in item] # 精确词组匹配取所有命中元素 match_items_exact = [item for item in my_list if target in item.split(',')]
内容的提问来源于stack exchange,提问作者Fluxy
相关产品推荐
相关产品推荐

