python之序列结构 集合(七)

集合是python中无序可变序列,使用一对大括号作为定界符,元素之间用逗号分隔,同一个集合内的每一个元素都是唯一的,元素之间不允许重复
凡无法计算哈希值(调用内置函数hash()时抛出异常)的对象都不能作为集合的元素


集合对象的创建和删除

直接赋值给变量即可创建一个集合对象

a = {3,5}  #创建集合对象
type(a) #查看对象类型

当然我们也可以把列表,元组,字符串,range对象等其它可迭代对象转换为集合,如果原来的数据中存在重复元素,则在转换为集合的时候只保留一个,如果原序列或迭代对象有不可哈希的值,无法转换为集合,抛出异常

a_set = set(range(8,14)) #把range对象转换为集合

我们也可以使用集合推导式快速生成集合,而当我们不再使用某个集合时,可以使用del命令删除整个集合

集合元素的增删及运算
  • add()
    可以增加新元素,如果该元素存在则忽略该操作,不抛出异常
  • update()
    合并另一个集合中的元素到当前集合中,并自动去除重复的元素
s = {1,2,3}
s.add(3)  #添加元素,重复元素自动忽略
s.update({3,4}) #更新当前字典,自动忽略重复元素
#输出{1,2,3,4}
  • pop()
    随机删除并返回集合中的一个元素,如果集合为空,则抛出异常
  • remove()
    删除集合中的元素,如果指定元素不存在则抛出异常
  • discard()
    删除集合中一个特定元素,元素不存在则忽略该操作
  • clear()
    清空集合
s.discard(5) #删除元素,不存在忽略操作
s.remove(5) #删除元素,不存在抛出异常
#输出为keyError: 5
s.pop() #删除并返回一个元素
#输出为1

内置函数len(), max(), min(), sum(), sorted(), map(), filter(), enumerate()等也适用于集合,同时也支持数学意义上的交集,并集,差集等运算

e.g.

a_set = set([8,9,10,11,12,13])
b_set = set([0,1,2,3,,7,8])

a_set | b_set  #并集
a_set.union(b_set)  #并集

a_set & b_set #交集
a_set.intersection(b_set) #交集

a_set.difference(b_set)  #差集
a_set-b_set

a_set.symmetric_difference(b_set)  #对称差集
a_set^b_set

当然关系运算符> >= < <= 作用于集合时表示集合之间的包含关系,而不是比较集合中元素的大小关系

x = {1,2,3}
y = {1,2,5}
z = {1,2,3,4}

x < y #输出False 比较集合大小/包含关系
x < z #真子集,输出True
{1,2,3} <= {1,2,3}  #子集,输出True

x.issubset(y) #测试是否为子集,输出False
{3}.isdisjoint({4})  #如果两个集合的交集为空,返回True

不可变集合frozenset
用法与set类似,支持交集,并集,差集等运算以及测试是否为子集或超集等运算
没有修改集合对象的方法

x = frozenset(range(5))  #创建不可变集合
x.add(5) #不支持add()方法,抛出异常

x | frozenset(range(5,10)) #并集运算
x & frozenset(range(5,10)) #交集运算
x - frozenset(range(5,10)) #差集运算
frozenset(range(4)) < frozenset(range(5)) #集合包含关系比较,返回True`在这里插入代码片`
发布了78 篇原创文章 · 获赞 181 · 访问量 8694

猜你喜欢

转载自blog.csdn.net/qq_44790423/article/details/100627763