代码改变世界

Python集合详解

2021-11-18 14:31  何小六soso  阅读(188)  评论(0编辑  收藏  举报

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'}