从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件

15、Python数据类型-集合类型

发布:蔺要红04-10分类: Python

集合类型:


集合是一个无序的,不能重复的数据组合

去重、把一个列表变成集合,就自动去重
关系测试、测试两组数据之前的交集,差集,并集


集合和字典的区别
>>> n = {}  #空是字典
>>> type(n)
<class 'dict'>
>>> n = {1,2,3}  #有数据(无key),集合
>>> type(n)
<class 'set'>
>>> n = {'k3': 'v3', 'k2': 'v2', 'k4': 'v4', 'k1': 'v1'}
>>> type(n)   #有数据有key为字典
<class 'dict'>
>>> 
实例:
>>> s = {1, 2, 3, 4, 'a', 'a', 'b'} #定义一个集合如果有重复会自动去重
>>> s
{1, 2, 3, 4, 'b', 'a'}
>>> n = [1,2,3,3,'a','a','b']
>>> m = set(n)   #把列表变成一个集合并且自动去重
>>> m
{'a', 1, 2, 3, 'b'}
#增加
>>> m.add('lin')
>>> m
{1, 2, 3, 'b', 'a', 'lin'}
>>> m.remove('a')  #删除a
>>> m.remove(1)
>>> m.pop()  #随机删除、和字典不要搞混了,字典pop是删除一个key,不是随机删
2
>>> m
{3, 'b', 'lin'}
>>> m.remove(5)  #romove删除,如果不存在,则会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 5
>>> m.discard(5)  #删除没有的、如果不存在、不会报错
>>> m
{3, 'b', 'lin'}
>>> m.discard(3)  #discard删除
>>> m
{'b', 'lin'}
#查看帮助:
>>> help(s.update)
Help on built-in function update:

update(...) method of builtins.set instance
    Update a set with the union of itself and others.
#update用法,都会自动去重
>>> m
{'b', 'lin'}
>>> s
{3, 4, '2', 'b', 'lin'}
>>> m.update(s)
>>> m
{'2', 3, 4, 'b', 'lin'}
>>> m.update([9,8,7])
>>> m
{'2', 3, 4, 7, 8, 9, 'b', 'lin'}
>>> m.clear() # 清空集合
>>> m
set()

 
集合的关系测试
>>> iphone7 = {'lin','yao','hong','ding','qiao'}
>>> iphone8 = {'lin','xiao','hong','mao','wang'}
#交集
>>> iphone7.intersection(iphone8)
{'hong', 'lin'}
>>> iphone7 & iphone8
{'hong', 'lin'}
#差集
>>> iphone7.difference(iphone8) #得出7有8没有
{'ding', 'qiao', 'yao'}
>>> iphone7 - iphone8
{'ding', 'qiao', 'yao'}
>>> iphone8.difference(iphone7) #得出8有7没有
{'wang', 'xiao', 'mao'}
>>> iphone8 - iphone7
{'wang', 'xiao', 'mao'}
#并集(说白了就是去重),变成一个集合
>>> iphone8.union(iphone7)
{'wang', 'ding', 'hong', 'xiao', 'mao', 'qiao', 'yao', 'lin'}
>>> iphone8 | iphone7
{'wang', 'ding', 'hong', 'xiao', 'mao', 'qiao', 'yao', 'lin'}
#对称交集(说白了就是把交集删掉、然后合并成一个集合,)
>>> iphone7.symmetric_difference(iphone8)
{'wang', 'ding', 'xiao', 'mao', 'qiao', 'yao'}
#-----------------比较绕口--------------
#超集和子集
>>> m = {1,2,3,4,5,6,7}
>>> n = {1,2,3}
>>> n.issubset(m) #判断n是不是m的子集
True
>>> m.issubset(n)
False
--------------------------------------------
>>> m = {1,2,3,4,5,6,7}
>>> n = {1,2,3}
>>> n.issuperset(m) #判断n是不是m的超集
False
>>> m.issuperset(n) #判断m是不是n的超集
True
#判断两个集合不相交、不相交返回True
>>> m = {1,2,3,4,5,6,7}
>>> n = {1,2,3}
>>> p = {1,2,8}
>>> k = {8,9,10}
>>> m.isdisjoint(k)
True
>>> m.isdisjoint(n)
False
>>> m.isdisjoint(p)
False
扩展
#实践结果、把iphone7和ipone8的差集赋值给ipone7
>>> iphone7
{'ding', 'qiao', 'yao', 'lin', 'hong'}
>>> iphone8
{'hong', 'wang', 'xiao', 'lin', 'mao'}
>>> iphone7.difference_update(iphone8)
>>> iphone7
{'ding', 'qiao', 'yao'}
>>> iphone8
{'hong', 'wang', 'xiao', 'lin', 'mao'}


#实践结果、把iphone7和ipone8的交集赋值给ipone7
>>> iphone7
{'ding', 'qiao', 'yao', 'lin', 'hong'}
>>> iphone8
{'hong', 'wang', 'xiao', 'lin', 'mao'}
>>> iphone7.intersection_update(iphone8)
>>> iphone7
{'hong', 'lin'}
>>> iphone8
{'hong', 'wang', 'xiao', 'lin', 'mao'}
 
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站