Python集合,固定集合,集合推导式,构造函数,常用方法
集合:set
集合是可变的容器
集合内的数据对象是唯一的(不能重复多次的)
集合是无序的存储结构,集合中的数据没有先后关系
集合内的元素必须是不可变的对象
集合是可迭代的
集合是相当于只有键没有值的字典(键则是集合的数据)
创建集合:
s = set() 创建一个空的集合
s = set(可迭代对象) 用可迭代对象创建一个新的集合对象
s = {1, 2, 3} 集合中的三个整数1,2,3
如:
s = set("ABC") => ('A','B','C')
s = set('ABCABC') => ('A','B','C') #不会重复
s = set({1:'aA',2:'dd'})
s = set([1,2,[1,2],4]) => 报错,[1,2]是可变的对象无法生成固定的哈希值
集合的运算:
& 生成两个集合的交集 (共有部分)
s1 = {1,2,3}
s2 = {2,3,4}
s1 & s2 => {2,3}
| 生成两个集合的并集 (全加起来去除重复)
s1 = {1,2,3}
s2 = {2,3,4}
s1 | s2 => {1,2,3,4}
- 生成两个集合的补集 (生成s1有,s2没有的集合)
s1 = {1,2,3}
s2 = {2,3,4}
s1 - s2 => {1}
^ 生成两个集合的对称补集 (生成s1有,s2没有的,和s2有,s1没有的)
s1 = {1,2,3}
s2 = {2,3,4}
s1 ^ s2 => {1,4}
< 判断一个集合是否是另一个集合的子集
> 判断一个集合是否是另一个集合的超集
s1 = {1,2,3}
s2 = {2,3}
s2 是 s1 的子集,s1 是 s2 的超集
== != 判断集合相同/不同
s1 = {1,2,3}
s2 = {2,3,1}
s1 == s2 #True
s1 != s2 #False 集合没有先后顺序
in / not in 运算符
等同于字典,in 运算符用于集合中,当某个值存在于集合中,则为真,否则为假
not in 与 in 返回值相反
如:
s = {1, 'two', 3}
1 in s #True , 2 in s #False , 3 not in s #False , 4 not in s #True
python3中可用于集合的函数:len() max() min() sum() any() all()
集合是可迭代对象
s = {1,2,3}
for x in s:
print(x)
集合的方法:
S.add(元素) 把元素往集合中添加
S.remove(元素) 删除元素,元素不存在会报错
S.discard(元素) 删除元素,不会报错
S.clear() 清空集合
S.copy() 拷贝一个集合
S.pop() 从集合中删除一个随机元素,集合为空时会报错
S.update(s2) 用S与S2得到的全集更新变量S
S.difference(s2) 用S-S2运算,返回存在于在S中但不在S2中的所有元素
S.difference_update(s2) 等同于 S = S - S2
S.intersection(s2) 等同于 S & S2
S.intersection_update(s2) 等同于 S = S & S2
S.isdisjoint(s2) 如果S与S2交集为空返回True 否则 False
S.issubset(S2) 如果S与S2交集为非空返回True 否则 True
S.isuperset(s2) 如果S2 S2 的子集返回 True 否则 False
S.symmetric_difference(s2) 返回对称补集,等同于 S^s2
S.symmetric_difference_update(s2) 用S与S2的对称补集更新S
S.union(s2) 生成S与S2 的全集
集合推导式:用可迭代对象来创建集合的表达式
语法:{表达式 for 变量 in 可迭代对象 [if 真值表达式]}
如: L = [2,3,5,7,3,5,7,11]
s = {x**2 for x in L} => {4,9,25,49,121}
固定集合:是不可变的,无序的,含有唯一元素的集合
作用:固定集合可以作为字典的键,也可以作为集合的值
创建一个空的固定集合
fs = forzenset()
创建一个非空的固定集合
fs = forzenset([2,3,5,7])
构造函数:forzenset([可迭代对象])
发表评论