为何无法用列表推导式判断字符串是否为列表中各字符串的子串?
问题原因及修复方案
语法错误的根源
你写的if file_name in MFII_file for MFII_file in MFII_files不符合Python语法规则。当你想在if条件里使用带for的遍历判断(生成器表达式)时,必须把整个生成器表达式用括号包裹起来,否则Python解释器无法正确识别语法结构,就会在for关键字处抛出语法错误。
逻辑上的额外问题
就算你补上括号写成if (file_name in MFII_file for MFII_file in MFII_files):,代码也不会按预期工作——因为生成器对象本身在布尔判断里会被视为True(只要生成器非空),不管file_name是否真的存在于某个列表元素中,都会执行print('yes')。
你真正需要的是判断是否存在任意一个列表元素包含file_name,这时候应该用any()函数,它会遍历生成器里的每个判断结果,只要有一个为True就返回True。
正确代码示例
MFII_files = ['patrick', 'domccc', 'joseph', 'harry'] file_name = 'ccc' # 使用any()判断是否有元素包含file_name if any(file_name in mfii_file for mfii_file in MFII_files): print('yes')
如果你不想用any(),也可以用普通循环实现相同逻辑:
MFII_files = ['patrick', 'domccc', 'joseph', 'harry'] file_name = 'ccc' found = False for mfii_file in MFII_files: if file_name in mfii_file: found = True break if found: print('yes')
内容的提问来源于stack exchange,提问作者ifrj
相关产品推荐
相关产品推荐

