一.集合的定义
1.集合里面的元素是不可重复的
s = {1,2,3,1,2,3,1,2,3,1,2,3}
print(s,type(s))
{1, 2, 3} <class 'set'>
print(s1,type(s1))
{1} <class 'set'>
2.定义一个空集合
s2 = set([])
print(s2,type(s2))
set() <class 'set'>
3.集合应用
列表去重:将列表转换为集合再转回列表。
li = [1,2,3,1,2,3,1,2,3]
print(list(set(li)))
[1, 2, 3]
PS:记录一个错误
一开始用list定义了一个集合,然后发现需要用到list转换集合类型,重新开始定义了一个集合,在使用list转换的时候时候报了很多次错误,最后意识到是定义的list变量还没有删除,函数意义的list失效,所以一定尽量避免用函数进行定义。
二.集合特性
集合支持的特性只有:成员操作符, 索引, 切片, 重复, 连接,均不支持。
成员操作符:
li = {1,2,3,4}
print(4 in li)
True
print(5 in li)
False
print(5 not in li)
True
print(4 not in li)
False
for循环:
li = {1,2,3,4}
for i in li:
print(i,end ="|")
1|2|3|4|
for循环并且求索引(枚举):
FCB = {'terStegen','Semedo','Pique','Rakitic','Busquets','Suarze'}
for number,player in enumerate(FCB):
print("%s:%s" %(number+1,player))
三.集合常用方法
集合为可变, 无序数据类型,即添加的顺序, 和在集合中存储的顺序不同
1.增加
增加单个元素
set.add(元素)
FCB = {'terStegen','Semedo','Pique','Rakitic','Busquets','Suarze'}
FCB.add('Messi')
print(FCB)
{'terStegen', 'Messi', 'Pique', 'Rakitic', 'Suarze', 'Semedo', 'Busquets'}
增加多个元素
set.update ( { 元素 } ) 一定加花括号!!!!
否则:
正确做法:
FCB = {'terStegen','Semedo','Pique','Rakitic','Busquets','Suarze'}
FCB.update({'Villa','Perdo','Vidal'})
print(FCB)
{'terStegen', 'Villa', 'Vidal', 'Pique', 'Perdo', 'Rakitic', 'Suarze', 'Semedo', 'Busquets'}
2.集合删除
set.pop( ) 删除集合中随机元素(多为第一个元素)
{'terStegen', 'Villa', 'Vidal', 'Pique', 'Perdo', 'Rakitic', 'Suarze', 'Semedo', 'Busquets'}
FCB.pop()
'terStegen'
print(FCB)
{'Villa', 'Vidal', 'Pique', 'Perdo', 'Rakitic', 'Suarze', 'Semedo', 'Busquets'}
set.remove( )删除指定元素
FCB.remove('Villa')
print(FCB)
{'Vidal', 'Pique', 'Perdo', 'Rakitic', 'Suarze', 'Semedo', 'Busquets'}
3.交集、并集、差集
并集:
集合1.union(集合2)
集合1 | 集合2
s1 = {1,2,3}
s2 = {2,3,4}
print("并集:",s1.union(s2))
并集: {1, 2, 3, 4}
print("并集:",s1 | s2)
并集: {1, 2, 3, 4}
交集:
集合1 . intersection(集合2)
集合1 & 集合2
s1 = {1,2,3}
s2 = {2,3,4}
print("交集:",s1.intersection(s2))
交集: {2, 3}
print("交集:",s1 & s2)
交集: {2, 3}
差集:
集合1.difference(集合2)
集合1 - 集合2
s1 = {1,2,3}
s2 = {2,3,4}
print("差集:",s1.difference(s2))
差集: {1}
print("差集:",s2.difference(s1))
差集: {4}
print("差集:",s1 - s2)
差集: {1}
print("差集:",s2 - s1)
差集: {4}
对等差分:
集合1.symmetric_difference(集合2)
集合1 ^ 集合2
print("对等差分:",s1.symmetric_difference(s2))
对等差分: {1, 4}
print("对等差分:",s1 ^ s2)
对等差分: {1, 4}
集合判断
isdisjoint() | 如果两个集合有一个空交集,返回 True |
issubset() | 如果另一个集合包含这个集合,返回 True |
issuperset() | 如果这个集合包含另一个集合,返回 True |
s3 = {1,2,3}
s4 = {1,2,3,4}
print(s3.issubset(s4))
True
print(s3.issuperset(s4))
False
print(s3.isdisjoint(s4))
False
四.集合的应用
1.求共同好友
Villa ={'terStegen','Semedo','Pique'}
Messi = {'Pique','Rakitic','Busquets','Suarze'}
print("Villa与Messi的共同好友为:%s" %(Villa & Messi))
Villa与Messi的共同好友为:{'Pique'}
2.微信群提醒:xxx与群里其他人都不是微信好友关系
3.权限判断:
网站: 权限: s1 = {A,B, C}, 用户westos目前的权限为s2 = {A,C},只有权限一致才可访问。