Python判断集合A是否为B子集代码中num_sets的作用及报错原因
问题成因
- Python语法规定,右侧表达式用逗号分隔多个值时,会自动将其打包为元组(tuple):
当你写A = input(),set(input().split())时,右侧的两个返回值(第一个input()读取的字符串、第二个set(...)生成的集合)会被打包为二元元组赋值给A,此时A的类型是元组而非集合,自然不存在issubset方法,触发属性报错。 - 原有写法
num_sets, A = input(),set(input().split())是利用了Python的序列解包特性:会将右侧的二元元组拆分为两个独立的值,分别赋值给左侧的num_sets和A变量,此时A拿到的就是你需要的集合对象,可以正常调用集合方法。
num_sets变量的作用
- 这里的
num_sets本质是用来承接无用的输入值:这类判断子集的编程题输入格式是固定的:每组测试用例会先输入集合A的元素个数,再输入A的所有元素,接着输入集合B的元素个数,再输入B的所有元素。代码中不需要用到元素个数的值,但必须读取这一行输入,否则后续输入读取的顺序就会错位,所以用num_sets接住这个没用的数值。 - 额外说明:循环头
for num_sets in range(T):里定义的num_sets和循环内部赋值的num_sets是同一个变量,内部的赋值会覆盖循环生成的迭代值,这个变量你完全不需要用到的话,用Python惯例的下划线_代替更清晰,比如写成_, A = input(), set(input().split()),可读性更高。
内容的提问来源于stack exchange,提问作者Al M. Rodriguez
相关产品推荐
相关产品推荐

