Python3列表元素匹配:存在匹配跳过子列表,无匹配输出对应子列表
错误原因
- 遍历对象错误:你的代码中
any(x in a for x in [b, c])遍历的是未定义的变量c和外层嵌套列表b,完全没有用到当前循环拿到的子列表i,自然无法完成子列表和a的元素匹配校验。你之前测试整数场景能正常运行属于巧合,大概率是测试时提前定义了符合逻辑的b、c变量。 - 匹配效率问题:直接用列表做
in判断的时间复杂度是O(n),数据量较大时性能会明显下降。
修复方案
先将列表a转为集合提升查询效率,再遍历b的每个子列表做匹配校验,无匹配元素时打印即可。
a = ['Apple', 'Orange', 'peaches'] b = [['Lettuce', 'Apple', 'eggs'], ['potato', 'tomato', 'pepper']] # 转为集合后in查询时间复杂度为O(1),大幅提升匹配效率 a_set = set(a) for sub_list in b: # 校验当前子列表是否有元素存在于a中,有则跳过 if any(item in a_set for item in sub_list): continue # 无匹配元素时打印当前子列表 print(sub_list)
运行后输出结果:
['potato', 'tomato', 'pepper']
如果需要一次性拿到所有符合要求的子列表,也可以用列表推导式实现:
a_set = set(a) valid_sub_lists = [sub for sub in b if not any(item in a_set for item in sub)] print(valid_sub_lists)
内容的提问来源于stack exchange,提问作者yosef ali
相关产品推荐
相关产品推荐

