集合的概念:
类比数学上的集合概念:无序(因此也无法访问)、无重复的元素集合
eg:
str1 = 'abc'#字符串可以进行索引,元素可重复 lst = [1,2,3]#列表可以进行索引,元素可重复 tpl = (1,2,3)#元组可以进行索引,元素可重复 dic = {'name':'jiang','age':18}#字典可以进行索引,元素可重复 jihe = {1,2,3}#集合的创建方式是{},但是里面的元素无法索引,也无法重复
集合又可以分为可变集合与不可变集合
可变集合(set)可以进行交并的操作
而不可变集合(frozenset)则无法进行交并操作
可变集合设置方式:1.直接运用{ }进行创建 2.运用set(iterable),set函数中放置可迭代对象创建
eg:
s1 = {'a','b','c'} s2 = set(range(1,4)) print(s1)#输出:{'b', 'c', 'a'} print(s2)#输出:{1, 2, 3}
不可变结合设置方式:frozenset(iterable),可迭代对象有 字符串、列表、元组、字典的key这些
注意:
设置集合时要注意:如果要设置空集合的话,必须要使用函数set()或者frozenset(),{}会被识别成空字典
s = {} print(type(s))#输出:<class 'dict'>
此外,集合中的元素类型必须是哈希类型(暂时理解为:不可变类型)
s = {[1,2,3]}##列表是一个可变的类型;此外,字典也是一个可变的类型
print(s)#输出:TypeError: unhashable type: 'list'
集合中单一元素的操作
集合的新增:
对象方法:add(元素)
s = {1,2} s.add(3) print(s)
但是注意:增加的元素不能是 list 或者 dict 这种可变类型的元素,否则会报错
集合元素的删除:
1.remove函数 2.discard函数 3.pop函数 4.clear函数
1.remove函数
语法:remove(元素)
2.discard函数作用和remove函数一样,区别在于:remove函数中找不到指定的删除元素时会报错,但是discard函数则不会,找不到指定的删除元素的话就什么事情都不处理
s = {1,2} s.discard(5) print(s)#output:{1, 2}
3.pop函数:删除指定元素并返回其数值
语法:pop(element);若没有指定element的话,那么pop函数就会在集合中 随机 删除元素并返回
s = {1,2,'j','i','a'} v = s.pop() print(v, s) v = s.pop() print(v, s)
这串代码的输出结果,每次运行都不相同
4.clear函数:清空集合
集合之间的操作:
交集、并集、差集(均为对象方法)
1.交集:三个方法
语法:intersection( iterable ),inter表示相互,section表示部分,后面的参数是可迭代对象
(这表明,字符串、列表、字典这些也都可以作为参数,intersection函数的原理就是,将括号里面的可迭代对象转化成集合,再取交集。因此需要注意:【"1","2",【"1","2"】】),这种列表就是错误的,因为集合要求是不可变类型,这个最外层的括号会被转化为集合,而内层的【】却是列表,为可变类型,会报错)
方法二:可以用逻辑符号 & ,同样可以得到一样的结果
s = {1,2,'j','i','a'} t = {1,3,'j','f'} result = s.intersection(t) print(result,type(result))#输出:{1, 'j'} <class 'set'>
注意一点:如果是可变集合与不可变集合取交集,得到的结果是什么类型?
s = {1,2,'j','i','a'} t = frozenset([1,3,'j','f']) result = s.intersection(t) print(result,type(result))#输出:{1, 'j'} <class 'set'>
此时 集合 s 作为对象,得到的结果类型跟s一样为可变集合
当t作为对象时,得到的结果类型为?
s = {1,2,'j','i','a'} t = frozenset([1,3,'j','f']) result = t.intersection(s) print(result,type(result))#输出:{1, 'j'} <class 'set'>
结果类型跟t一样为 不可变类型集合。
说明两个不同类型集合混合时,交集的数据类型和对象集合的类型保持一致
方法三:intersection_update()函数
作用:对于 可变列表 ,取交集以后并更改对应的 可变列表,要注意的是,该对象方法是直接修改列表,没有返回值
s = {1,2,'j','i','a'} t = frozenset([1,3,'j','f']) s.intersection_update(t) print(s)#输出:{1, 'j'}
2.并集:
union函数:也可逻辑运算符 |
s = {1,2,'j','i','a'} t = frozenset([1,3,'j','f']) result = s.union(t) print(result)#output:{'j', 1, 2, 'i', 3, 'f', 'a'}
并集中的update函数:
s = {1,2,'j','i','a'} t = frozenset([1,3,'j','f']) s.update(t) print(s)#output:{1, 2, 3, 'f', 'j', 'i', 'a'}
3.差集:
语法:difference();也可逻辑运算符 -
同样的也有差集的update
集合的判定:
判定一个集合是否包含另一个集合:is super set()
判定一个集合是否包含于另一个集合:is sub set()
判定两个集合是否 不 相交:is dis joint()
s = {1,2} t = {1, 2, 3, 'j', 'f'} result1 = s.issubset(t) print(result1)#output:True result2 = t.issuperset(s) print(result2)#True