python中的集合
在python中,普通集合是可变数据类型
通过以下案例说明:
>>> s = {1, 2, 3, 4} >>> id(s) 2108634636808 >>> s.add(5) >>> s {1, 2, 3, 4, 5} >>> id(s) 2108634636808
在增加集合中的元素后,集合内存地址并没有改变,说明集合是可变数据类型
集合的重要特点是去重:
>>> s = {1, 2, 2, 3} >>> s {1, 2, 3}
集合的操作
常见之增删改:
>>> s = {1, 2, 3, 4, 5, 6} >>> s.add(7) #增加 >>> s {1, 2, 3, 4, 5, 6, 7} >>> s.discard(8) #discard删除不存在的元素不会报错 >>> s {1, 2, 3, 4, 5, 6, 7} >>> s.discard(7) >>> s {1, 2, 3, 4, 5, 6} >>> s.remove(8) #remove删除不存在的元素会报错 Traceback (most recent call last): File "<pyshell#233>", line 1, in <module> s.remove(8) KeyError: 8 >>> s.remove(6) >>> s {1, 2, 3, 4, 5} >>> s.pop() 1 >>> s {2, 3, 4, 5}
>>> s.update({1,2,3}) #批量增加并自动去重
>>> s
{1, 2, 3, 4, 5}
>>> s.clear() #清空集合元素
>>> s
set()
#集合没有查询功能
集合的重要功能,关系测试:
>>> s1 = {1, 2, 3, 4} >>> s2 = {2, 4, 5, 9}
#s1中有而s2中没有的 >>> s1 - s2 {1, 3} >>> s1.difference(s2) {1, 3}
#S1和s2的并集 >>> s1 | s2 {1, 2, 3, 4, 5, 9} >>> s1.union(s2) {1, 2, 3, 4, 5, 9}
#S1和s2的交集 >>> s1 & s2 {2, 4}
>>> s1.intersection(s2) {2, 4}
#s1和s2的对称差集(并集-交集):
>>> s1.symmetric_difference(s2)
{1, 3, 5, 9}
#将s1-s2结果赋给s1
>>> s1.difference_update(s2)
>>> s1
{1, 3}
#将s1,s2的交集赋给s1
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 4, 5, 9}
>>> s1.intersection_update(s2)
>>> s1
{2, 4}
#将s1,s2的对称差集赋给s1
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 4, 5, 9}
>>> s1.symmetric_difference_update(s2)
>>> s1
{1, 3, 5, 9}
集合的关系判断
>>> s1 = {1, 2} >>> s2 = {1, 2, 3} >>> s1.issubset(s2) #A是否是B的子集 True >>> s2.issuperset(s1) #A是否是B的父级 True >>> s1 <= s2 #简写形式 True >>> s1.isdisjoint(s2) #判断A和B是否不相交 False
下面简单认识一下不可变集合----frozenset:
>>> s = {1, 2, 3, 4} >>> s1 = frozenset(s) >>> s1 frozenset({1, 2, 3, 4})
通过frozenset函数将集合变成不可变集合,显然不可变集合就没了上面普通集合的增删操作,而仅仅保留关系测试和关系判断的操作,使用方法同上。