python学习笔记(七)之集合2 不变的集合 在”python学习笔记(六)之集合1“中以set()来建立集合,这种方式所创建的集合都是可原地修改的集合,或者说是可变的,也就是说是unhashable。 还有一种集合,不能在原处修改。这种集合的创建方法是用frozenset(),ps:frozen冻结的,是不可变的,也就是说是hashable--可哈希。 实例1:
f_set = frozenset("wtf") f_set frozenset(['t', 'w', 'f'])
f_set.add("python") Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'frozenset' object has no attribute 'add' 说明:报错说集合是不能修改的。 对比可以修改的集合: 实例2:
c_set = set("name") c_set set(['a', 'e', 'm', 'n'])
c_set.add("python") c_set set(['a', 'e', 'm', 'python', 'n'])
集合运算 元素与集合的关系 只有一种关系:元素要么属于集合,要么不属于。 实例3:
c_set set(['a', 'e', 'm', 'python', 'n'])
"a" in c_set True
"wtf" in c_set False
集合与集合的关系 判断集合a是否等于集合b 实例4:
a = set(["q","w","t","f"]) b = set(["w","f","q","t"]) a == b True
a != b False
判断集合c是否是集合b的子集,或者说b是否是a的超集(超集:即a的元素也都是b的元素,但是b的元素比a的元素数量多。) 实例5:
c = set(["w","t","f","g"]) d = set(["w","t"]) d < c ##d是c的子集 True
d.issubset(c) ##d是否是c的子集 True
c.issuperset(d) ##c是否是d的超集 True
集合的并集 表达式:a | b 或者使用函数a.union(b) ps:union联盟 注意:a,b的并集得到的结果就是两个集合并集,这个结果是新生成的一个对象,不是将集合a扩充! 实例6:
a = set(["w","t","f"]) b = set(["z","h","a","o"]) a | b set(['a', 't', 'w', 'f', 'h', 'z', 'o'])
a.union(b) set(['a', 't', 'w', 'f', 'h', 'z', 'o'])
a set(['t', 'w', 'f'])
b set(['a', 'h', 'z', 'o'])
集合的交集 表达式:b & c 或者使用函数b.intersection(c) ps:intersection 路口 实例7:
b = set(["z","h","a","o"]) c = set(["z","y","d"]) b & c set(['z'])
b.intersection(c) set(['z'])
b set(['a', 'h', 'z', 'o'])
c set(['y', 'z', 'd'])
集合的补集 表达式:b - c ##b相对于c的差(补),即b相对于c不同的元素 或者使用函数 b.difference(c) 实例8:
b set(['a', 'h', 'z', 'o'])
c set(['y', 'z', 'd'])
b - c set(['a', 'h', 'o'])
c - b set(['y', 'd'])
b.difference(c) set(['a', 'h', 'o'])