Python二维集合场景下issubset用法:如何判断A元组是B某元组子集
需求背景
现有两个存储元组的集合A、B,元组内部元素顺序不影响判断逻辑,要求实现:当A的元素对应所有值同时出现在B的任意一个元组内时,返回true,否则返回false。
示例数据如下:
A = {('z', 'y')} B = {('x', 'y'), ('y', 'z'), ('a', 'b')}
原有代码问题
原有代码判断逻辑为A整体是否是B的子集,和需求不符,代码如下:
if ((set(A)).issubset(B)): print("true") else: print("false")
解决方案
核心逻辑为:将A内的目标元组转为无顺序的集合,遍历B内所有元组,逐个判断目标集合是否为当前元组转成集合的子集即可。
单目标匹配方案(适配A仅有1个目标元组场景)
# 提取A中的目标元素集合 target = set(next(iter(A))) # 遍历匹配,任意元组满足条件即返回True result = any(target.issubset(set(tup)) for tup in B) print(str(result).lower())
该方案使用any()实现短路求值,匹配到符合条件的元组后立刻终止遍历,执行效率更高。
多目标匹配方案(适配A存在多个目标元组场景)
如果需求调整为只要A中任意一个目标元组的元素都出现在B的某一个元组内就返回True,可以使用如下代码:
# 提取所有目标集合 targets = [set(t) for t in A] # 遍历匹配 result = any(any(t.issubset(set(tup)) for tup in B) for t in targets) print(str(result).lower())
上述示例数据运行后输出为true,符合预期。
内容的提问来源于stack exchange,提问作者soodeh
相关产品推荐
相关产品推荐

