Python嵌套列表元素存在性校验代码执行异常原因求解
问题原因
1. 生成器对象判断逻辑错误
你代码中est_dans_liste = (element in sublist for sublist in l)的写法创建的是生成器对象,Python中生成器对象只要被成功创建,本身的布尔值就恒为True,不会自动执行内部的元素存在性判断逻辑,因此无论目标元素是否真的在嵌套列表中,if est_dans_liste的判断结果永远为真,完全不符合需求。
2. 测试数据不符合预期
你当前用于测试的嵌套列表l = [[]]仅包含一个空的子列表,本身不存在数值1,就算判断逻辑正确也无法得到匹配结果,可替换为注释中给出的ini_list做功能验证。
修复方案
方法1:搭配any()函数触发生成器执行
any()函数会迭代生成器的所有返回值,只要有一个值为True就直接返回True,刚好匹配「存在任意一个子列表包含目标元素」的判断需求,代码修改如下:
# 测试用嵌套列表 l = [[1, 2, 5, 10, 7], [4, 3, 4, 3, 21], [45, 65, 8, 8, 9, 9]] element = 1 est_dans_liste = any(element in sublist for sublist in l) if est_dans_liste: print("ok")
方法2:平铺嵌套列表后直接判断
如果嵌套层级固定为2层,也可以先把所有子列表的元素合并为一维列表,再直接判断元素是否存在:
l = [[1, 2, 5, 10, 7], [4, 3, 4, 3, 21], [45, 65, 8, 8, 9, 9]] element = 1 flat_list = [item for sublist in l for item in sublist] est_dans_liste = element in flat_list if est_dans_liste: print("ok")
内容的提问来源于stack exchange,提问作者de Beyssac Olivier
相关产品推荐
相关产品推荐

