Python中如何提取子列表对应False条件的元素?
提取列表中对应False标记的元素
我需要从列表J里提取对应cond1子列表中False位置的元素,以下是我的代码、当前输出和期望输出:
当前代码
J=[[1, 2, 4, 6, 7], [1, 4]] cond1=[[[False, True, False, True, False]], [[False, True]]] result = [value for value, condition in zip(J, cond1) if not condition] print(result)
当前输出
[]
期望输出
[[1,4, 7],[1]]
问题分析与解决方案
你的代码存在两个核心问题:
- cond1的结构比J多一层嵌套(每个元素是包含条件列表的子列表,比如
[[False, True,...]]),直接zip后层级不匹配 - 列表推导式逻辑错误,需要遍历子列表内部的元素与对应条件,而非直接判断整个condition对象
正确写法需要先解开cond1的嵌套,再逐个匹配元素和条件:
J=[[1, 2, 4, 6, 7], [1, 4]] cond1=[[[False, True, False, True, False]], [[False, True]]] result = [ [num for num, cond in zip(sub_j, sub_cond[0]) if not cond] for sub_j, sub_cond in zip(J, cond1) ] print(result)
运行后即可得到期望输出[[1,4,7],[1]]。
代码说明
- 外层推导式遍历J和cond1的每组子列表:
sub_j对应J的子列表,sub_cond对应cond1的嵌套子列表 - 内层推导式遍历
sub_j的元素num和sub_cond[0]的条件cond(取[0]是为了拿到cond1里实际的条件列表) - 仅保留条件为False时对应的元素
num
内容的提问来源于stack exchange,提问作者AEinstein
相关产品推荐
相关产品推荐

