您的位置:首页 > 理论基础 > 数据结构算法

python数据结构之集合

2017-08-30 21:25 246 查看

集合set

思维导图:



集合的引入:

python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(并), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.

当要去除列表中的重复元素时,可将他们转换成集合,然后再转化成列表。









集合的定义

集合的创建集合是一个无序不重复元素的集

不可变的数据类型一定可哈希;hash()内置函数可以判断某个类型是否可哈希;

s={int | str | tuple | float | long }

必须为不可变数据类型!

列表和字典都是可变的,可变是指改变值时,改变的是id中的值,而不是指向所改变值的id。





集合的函数:



集合的关系测试

s.intersection(s1[,..]) ##交集,不改变s

(s & s1 & …..)

s.intersection_update(s1[,..]) ##交集,改变s

s.union(s1[,…]) ##并集,不改变s

(s | s1 | ….)

s.difference(s1[,..]) ##差集,不改变s

(s-s1)

s.difference_update(s1[,..]) ##差集,改变s

s.symmetric_difference(s1) ##对等差分,两个差集的并

(s ^ s1)

s.symmetric_difference_update(s1) ##对等差分,改变s

s.isdisjoint(s1) ##s和s1是否没有交集,有,返回False,无,返回True

s.issubset(s1) ##s是否为s1的子集,返回bool

s.issuperset(s1) ##s是否为s1的父集,返回bool















s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = {1, 2}
s4 = {5}

print "s1,s2,s3的交集:", s1.intersection(s2, s3)
print "s1,s2,s3的交集:", s1 & s2 & s3
print "s1,s2,s3的并集:", s1.union(s2, s3)
print "s1,s2,s3的并集:", s1 | s2 | s3
print "s1-s2的差集:", s1.difference(s2)
print "s1-s2的差集:", s1 - s2
print "s1-s2-s3的差集:", s1.difference(s2, s3)
print "s1-s2-s3的差集:", s1 - s2 - s3
print "s2-s1的差集:", s2.difference(s1)
print "s1和s2的对等差分:", s1.symmetric_difference(s2)
print "s1和s2的对等差分:", s1 ^ s2
print "s2和s1的对等差分:", s2.symmetric_difference(s1)

# s.isdisjoint(s2)  如果有交集,返回False;否则,返回True;
print "s1和s4是否没有交集:", s1.isdisjoint(s4)

print "s3是否为s1的子集:", s3.issubset(s1)

print "s1是否为s3的父集:", s1.issuperset(s3)


集合的增删改查:

len(s) # set 的长度

x in s # 测试 x 是否是 s 的成员

增加:

s.add(1) ##添加元素1至s(1个元素)

s.update(s1) ##将集合|列表|元组s1元素添加至s

删除:

s.remove(1), # 删除存在的元素1,如果不存在,直接报错;



s.discard(1) # 删除存在的元素1,如果不存在,do nothing;

s.pop(), # 随即删除集合元素,不加任何参数;

复制: s1 = s.copy() #s和s1的id不同



清空: s.clear()

删除:del(s)

冻集(frozenset)

冻住的集合,不能增删改;

frozenset(set)

set(frozenset)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python