Python集合详解
确定的一组无序的数据的组合
- 集合中的元素值不能重复
- 多个数组组合的复合型数据(容器类型数据)
- 数据是无序的
- 功能:成员检测、去除重复数据、集合类计算,例:交集、并集、差集、对称差集
集合定义
- 直接使用{}定义集合
- 使用set()函数定义或转换
- 集合推导式定义集合
注意:集合中的元素不能重复,集合中存放的数据:Number、String、Tuple、冰冻集合
内置函数
#定义集合
vars={123,'a','b','c',True,3.123,(1,2,3),123,False,0,False} # 去重123和False(0代表False),{True, 'a', 3.123, 'b', 'c', 123, (1, 2, 3),0}
print(vars)
# 检查集合中是否存在值
print(123 in vars) # True
# 获取集合中长度
print(len(vars)) # 8
# 遍历集合
for i in vars:
print(i)
# vars.add() 向集合中添加元素
vars.add('java') # {False, True, 3.123, 'b', (1, 2, 3), 'a', 'c', 'java', 123}
print(vars)
# vars.pop() 删除集合元素
print(vars.pop()) # 删除任意元素,并返回
print(vars) # 随机删除,{True, 3.123, 'b', (1, 2, 3), 'a', 'c', 'java', 123}
# vars.remove() 删除指定元素,如果元素不存在返回error
vars.remove(3.123)
print(vars) # {True, 'b', 'c', (1, 2, 3), 'a', 'java', 123}
# vars.discard() 删除指定元素,如果元素不存在不报错
vars.discard('java')
print(vars.discard('python'))
print(vars) # {True, 'c', 'a', (1, 2, 3), 'b', 123}
# cars.update() 更新集合
vars.update({1,2,3,4,5}) # Ture 代表1 {True, 2, 3, 4, 5, (1, 2, 3), 'a', 'b', 123, 'c'}
print(vars)
# vars.copy() 浅拷贝
newset=vars.copy()
print('newset=',newset) # newset= {'c', True, 'a', 2, 3, 4, 5, (1, 2, 3), 'b', 123}
# 冰冻集合
v = frozenset((1,23,32))
print(v) # frozenset({32, 1, 23})
# vars.clear() 清空集合
vars.clear()
print(vars) # set()
冰冻集合
语法:定义冰冻集合只能用 frozenset()函数,冰冻集合一单定义不可修改,冰冻集合只能做集合的相关运算,
frozenset():强制转换类函数,可以把任何容器类型数据装换为冰冻集合
# 冰冻集合
v = frozenset((1,23,32))
print(v) # frozenset({32, 1, 23})
集合推导式
# 普通推导式
varset={1,2,3,4,5,6,7,8,9,10}
newset={i<<1 for i in varset}
print(newset)
# 条件表达式推导式
newset={i<<1 for i in varset if i%2==0}
print(newset)
# 多循环列表推导式
vars1={1,2,3,4,5,6}
vars2={2,3,4,5,6,7}
newset={i+j for i in vars1 for j in vars2}
print(newset)
newset=[i+j for i in vars1 for j in vars2]
print(newset)
集合操作
# 集合运算
varset1={'python', 'java', 'php', 'c', 'c++', 'vbs', 'shell','true','hello'}
varset2={'PYTHON', 'JAVA', 'PHP', 'C', 'C++', 'VBS', 'SHELL','true','hello'}
# 求两个集合的交集(两个集合的相同元素)
res=varset1 & varset2
print(res) # {'true', 'hello'}
# 求两个集合的并集(去重)
res=varset1 | varset2
print(res) # {'php', 'shell', 'JAVA', 'VBS', 'C', 'SHELL', 'c', 'java', 'vbs', 'c++', 'C++', 'true', 'hello', 'PYTHON', 'python', 'PHP'}
# 求两个集合的差集
res=varset1 - varset2 # varset1中有varse2中没有
print(res) # {'php', 'python', 'c++', 'java', 'c', 'shell', 'vbs'}
# 求两个集合的对称差集 (去掉相同元素)
res=varset1^varset2
print(res) # {'PYTHON', 'C', 'vbs', 'php', 'c++', 'python', 'SHELL', 'java', 'VBS', 'shell', 'c', 'PHP', 'C++', 'JAVA'}