马哥博客作业第四周

python集合,简称集

由任意个元素构成的集体。高级语言都实现了这个非常重要的数据结构类型。Python中,它是可变的、无序的、不重复的元素的集合。

集合的初始化

set()->newemptysetobject
set(iterable)->newsetobject
s1=set()
s2=set(range(5))
s3=set([1,2,3])
s4=set('abcdabcd')
s5={}#这是什么?  这是字典
s6={1,2,3}
s7={1,(1,)}
 
元素性质
去重:在集合中,所有元素必须相异
无序:因为无序,所以不可索引
可哈希:Python集合中的元素必须可以hash,即元素都可以使用内建函数hash
目前学过不可hash的类型有:list、set、bytearray
可迭代:set中虽然元素不一样,但元素都可以迭代出来
 
增加
add(elem)
增加一个元素到set中
如果元素存在,什么都不做
update(*others)
合并其他元素到set集合中来
参数others必须是可迭代对象
就地修改
s=set()
s.add(1)
s.update((1,2,3),[2,3,4])
 
删除
remove(elem)
s=set(range(10))
s.remove(0)
s
 
从set中移除一个元素
discard(elem)
s = set(range(10))
s.discard(5)
s.discard(12)
s
 
从set中移除一个元素
元素不存在,什么都不做
pop()->item
s=set(range(10))
print(s.pop())
print(s.pop())
s

 

 

移除并返回任意的元素。为什么是任意元素?#因为字典无序
空集返回KeyError异常
clear()
移除所有元素
s=set(range(10))
s.clear()
s
 

 

 

修改
集合类型没有修改。因为元素唯一。如果元素能够加入到集合中,说明它和别的元素不一样。
所谓修改,其实就是把当前元素改成一个完全不同的元素,就是删除加入新元素。

索引
非线性结构,不可索引。

遍历
只要是容器,都可以遍历元素。但是效率都是O(n)

成员运算符in
print(10in[1,2,3])
print(10in{1,2,3})
 
 
 
可哈希
数值型int、float、complex
布尔型True、False
字符串string、bytes
tuple
None
以上都是不可变类型,都是可哈希类型,hashable
set的元素必须是可hash的。

集合概念

全集
所有元素的集合。例如实数集,所有实数组成的集合就是全集
子集subset和超集superset
一个集合A所有元素都在另一个集合B内,A是B的子集,B是A的超集
真子集和真超集
A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集
并集:多个集合合并的结果
交集:多个集合的公共部分
差集:集合中除去和其他集合公共部分
 
并集
将两个集合A和B的所有的元素合并到一起,组成的集合称作集合A与集合B的并集
union(*others)返回和多个集合合并后的新的集合
|运算符重载,等同union
update(*others)和多个集合合并,就地修改
|=等同update
s1 = {1,2,3,4,5}
s2 = {4,5,6,7,8}
print(s1 | s2 )
print(s1.union(s2))
 
 
交集
集合A和B,由所有属于A且属于B的元素组成的集合
intersection(*others)返回和多个集合的交集
&等同intersection
intersection_update(*others)获取和多个集合的交集,并就地修改
&=等同intersection_update
s3 = {1,2,3,4,5}
s4 = {4,5,6,7,8}
print(s3 & s4)
print(s3.intersection(s4))
 
 
差集
集合A和B,由所有属于A且不属于B的元素组成的集合
difference(*others)返回和多个集合的差集
-等同difference
difference_update(*others)获取和多个集合的差集并就地修改
-=等同difference_update
s5 = {1,2,3,4,5}
s6 = {4,5,6,7,8}
print(s5 - s6)
print(s5.difference(s6))
 
对称差集
 
集合A和B,由所有不属于A和B的交集元素组成的集合,记作(A-B)∪(B-A)
symmetric_differece(other)返回和另一个集合的对称差集
^等同symmetric_differece
symmetric_differece_update(other)获取和另一个集合的对称差集并就地修改
^=等同symmetric_differece_update
s7 = {1,2,3,4,5}
s8 = {4,5,6,7,8}
print(s7 ^ s8)
print(s7.symmetric_difference(s8))

 
 
 
其它集合运算
issubset(other)、<=判断当前集合是否是另一个集合的子集
set1<set2判断set1是否是set2的真子集
issuperset(other)、>=判断当前集合是否是other的超集
set1>set2判断set1是否是set2的真超集
isdisjoint(other)当前集合和另一个集合没有交集,没有交集,返回True

 

posted @ 2020-04-13 13:34  爱python的小发  阅读(178)  评论(0)    收藏  举报