Python如何对比列表元素并筛选出不含另一列表元素的列表项
错误点说明
- 内层循环遍历对象错误:你需要检查
l2的元素是否包含l1的元素,内层循环应该遍历l1而非l2,原代码内层遍历l2是导致输出重复的核心原因 - 判断逻辑错误:原逻辑
j not in l1和需求完全不符,需求是判断当前l2的元素字符串中,不存在任意一个l1的元素 - 缩进格式错误:原代码的
if语句没有正确缩进在内层循环下,会引发语法错误
修复后的代码
基础循环写法(易理解)
l1 = ['a','b','c','d'] l2 = ['a is greater', 'f is greater', 'c is greater'] for item_l2 in l2: # 标记当前l2元素是否包含l1的任意元素 contain_l1 = False for item_l1 in l1: if item_l1 in item_l2: contain_l1 = True break # 找到匹配就可以跳出内层循环,无需继续判断 if not contain_l1: print(item_l2)
简洁写法(利用Python内置方法)
用any()方法判断是否存在任意一个匹配项,代码更精简:
l1 = ['a','b','c','d'] l2 = ['a is greater', 'f is greater', 'c is greater'] result = [x for x in l2 if not any(key in x for key in l1)] # 输出结果 for item in result: print(item)
两段代码运行后都可以得到预期输出:
f is greater
内容的提问来源于stack exchange,提问作者sodmzs1
相关产品推荐
相关产品推荐

