如何遍历两个嵌套列表并基于list1长度判断子集(避免重复输出)
实现28条结果输出的解决方案
需求说明
检查list1的每个元素是否是list2中对应子列表(即[cor[1] for cor in list2])的子集,最终生成一个长度为28(与list1长度一致)的结果列表,示例格式如下:
[(['1'], [43, 44, 45, 46, 47, 48], [43, 44, 45, 46, 47, 48, ..., 71], "YES"), ([0, 1, 2, 3, 4, 5, 6, 7], "NO")]
现有问题
原嵌套循环代码会遍历list2的3个元素,因此输出28×3=84条结果,无法满足仅输出28条的需求。
解决方案代码
result = [] for ent in list1: matched = False # 遍历list2寻找匹配的子列表 for cor in list2: if set(ent).issubset(cor[1]): result.append((cor[0], ent, cor[1], "YES")) matched = True break # 找到匹配后停止当前元素的遍历 if not matched: result.append((ent, "NO")) # 输出结果列表,共28条元素 for item in result: print(item)
逻辑说明
- 初始化空列表
result用于存储最终结果 - 遍历
list1中的每个元素ent:- 设置
matched标记位,初始为False - 遍历
list2中的每个子列表cor,判断ent是否是cor[1]的子集 - 找到匹配项时,按示例格式将结果加入
result,标记matched为True并跳出内层循环,避免重复匹配 - 若遍历完
list2都未找到匹配,按格式加入(ent, "NO")到result
- 设置
- 最终
result的长度与list1一致,为28条
内容的提问来源于stack exchange,提问作者iscream
相关产品推荐
相关产品推荐

