如何判断list2是否包含list1中某一个嵌套子列表的全部元素
Python列表包含校验实现方案
基础实现(适用于子列表无重复元素的场景)
核心逻辑:将list2转为集合降低元素查询的时间复杂度,再遍历list1的每个嵌套子列表,校验子列表的全部元素是否都存在于list2的集合中,只要有1个满足条件即可返回结果。
def check_sub_contains(list1: list[list], list2: list) -> bool: set2 = set(list2) # 只要存在任意一个子列表满足条件就返回True return any(all(item in set2 for item in sub_list) for sub_list in list1) # 代入示例数据测试 list1 = [[1, 2, 3], [4, 5, 6]] list2 = [1 ,8 ,7 ,2, 0, 3] print(check_sub_contains(list1, list2)) # 输出:True
如果需要获取具体匹配到的子列表,可调整返回逻辑:
def get_matched_sub(list1: list[list], list2: list): set2 = set(list2) for sub in list1: if all(item in set2 for item in sub): return sub # 无匹配时返回None return None
兼容子列表含重复元素的场景
如果嵌套子列表存在重复元素,使用集合的方式会丢失计数信息,此时可以借助Counter统计元素出现次数进行校验:
from collections import Counter def check_sub_contains_with_dup(list1: list[list], list2: list) -> bool: count2 = Counter(list2) for sub in list1: sub_count = Counter(sub) # 校验list2的所有元素计数都满足子列表的要求 if all(count2.get(k, 0) >= v for k, v in sub_count.items()): return True return False
内容的提问来源于stack exchange,提问作者shadowlegend551
相关产品推荐
相关产品推荐

