集合的概念 {元素}
集合set 是装有 独特值的无序袋子
1.创建集合 {元素必须存在}
注意 集合的类型是 set ,创建集合的时候,变量的名字不要写成 set ,以免覆盖set
a_set={1}
2.使用列表来创建集合
如同之前的列表和元组互换一样,可以使用 集合 set提供的函数set(列表)来进行类型的转换
3.创建一个空的集合
直接使用 set()来创建一个空的集合,这个和C体系的 构造函数一样的道理
这个时候主要一下,空的集合 和 {} 不是一个概念哦
虽然 集合是用 {} 创建的,但是里面必须要有元素
然后如果没有元素的时候,不能使用{} 表示集合了
这个时候的{} 表示了一个字典
4.求集合元素的个数
len(集合变量)
说明: 到这里我们发现了一个问题,求解长度 都用了 len() 函数了
没有如同 C 体系一样使用各自的 对象的 len方法
从字符串到集合 都是使用 len() 函数进行求解的
字符串,列表,元组,集合
这些都是多个元素的特征的
因此 可以理解为 可迭代的东西,len() 的输入值本质就是可迭代的东西
集合的操作
1 给集合中添加值
方法一 : 使用集合的 add 方法,添加元素
注意该元素如果和集合中的元素重复,不会报错,什么也不会改变
相当一个空的操作
方法二:使用集合的update方法
该方法接收一个集合作为参数,相当于对输入的集合的元素依次
调用 原来集合的add方法将他们插入到原来的集合中
说明:update方法可以携带多个参数的,
因此update可以接收多个集合作为输入参数
关于update方法进行的思维展开
我们尝试添加一个 数看看
TypeError: 'int' object is not iterable
结果是 int 不是一个可迭代的
那么意思是不是只要输入的参数是一个 可迭代的都可以呢?
不仅仅是集合这一种 ? 我们实验下
我们发现当输入的参数是 列表或者是元祖的时候也是可以的
所以呢 输入的值是可迭代的,例如下面的列表和元组,字符串也是可以的
因此我们之前学到的列表的操作 extend肯定也是一样的
所以呢,从现在开始,我们应该用 可迭代的观点 认识
字符串 , 列表 , 元祖 , 集合
如果输入的参数是他们之中一个,那么可能 迭代器作为输入都是可以的
可以迭代的东西,表象展示就是我们看到的上面的几个类型
但是学过Java知道,肯定有一个迭代器的存在
那么我们可以通过其他方式定义这个迭代器的
这个时候我们自己定义的迭代器也是可以作为输入参数的
2 删除集合的元素三种方法
方法一 使用 集合对象的 discard方法
该方法接收一个 集合的元素作为参数,从而删除该指定的元素
如果指定的元素在集合中不存在,那么相当一个空的指令,不会报错的
注意只能是单值的输入,如果输入的值是一个集合的子集,相当于找不到元素
方法二:使用集合对象的remove方法进行删除
该方法也是接收一个单值作为输入
但是如果该值在集合中不存在的时候,那么该方法会报异常的 KeyError
KeyError:xxx
方法三 集合的pop方法
和列表一样,集合也有这个 pop方法
但是集合是无序的,因此不会像 堆栈那样pop总是末尾的
集合的pop方法 会删除一个元素,该元素的位置不定,然后返回该删除的元素
列表可以使用 del 列表元素来删除列表的一个元素
但是集合呢没有这个访问固定元素的功能,因此不能使用 del 操作符进行
3.清空集合
这个和列表的清空一样,使用 clear 方法进行清空即可
4. 判断某个元素是否在集合中
这个和列表一样 我们可以使用 in 操作符
到这里我们也发现,
del , in 这些操作符
in 在 列表 , 元组 , 集合中都可以使用
因此也可以推断出 , del , in 也适合于这个 可迭代的
然而,列表和元组的 index 方法 对于集合是没有的,无法使用
5.集合的并操作
使用集合的 union操作可以进行并集操作,union()
union()方法返回一个新集合
和之前的推断一样,凡是能够接收一个集合作为入参的,那么也可以接收
一个可迭代的,因此 列表和元组都是可以的
6.集合的交集操作
使用 intersection方法进行集合的交集操作
交集操作也一样,可以使用这个 元组作为输入的参数
7.集合的差操作
A-B 在A中但是不在B中的元素
使用difference 方法进行
可以接收一个可迭代的东西作为输入参数
8.两个集合只在一个集合中出现的元素
这个表示的是 只在一个集合中出现
也就是下图中 蓝色区域
也就是 A+B-A∩B
这个使用 集合的 symmetric_difference 方法进行
9.集合操作的对称性
union , intersection , symmetric_difference 这三个操作是对称的
但是 difference 操作不是对称的
10.判断一个集合是否是一个集合的子集合
使用 issubset 方法进行判断,和前面的方法一样,能接收一个集合作为参数
也能接收一个迭代器
12.空集合为假值
这个要注意,空集合为假值
使用 if 判断的时候 检测结果为 False
集合的解析
集合的解析和列表是类似的,只要将 [] 换成这个 {} 就行了