集合
特点
没有重复的元素,元素的排列是无序的(没有下标),但会自动从小到大排列数字,如果是一个字符串(字符)和数字混合的集合,输出集合时也会将数字进行排列。
定义
集合也用花括号声明定义({})。
-
定义空集合:set1=set()
空集合的定义只能这样,因为集合和字典定义用到括号一样,如果用:set1={}会被认为是定义的字典
-
定义非空集合:set2={'xiaoxiaoguai'}
用花括号定义,如果括号中的是单个元素,则是集合,括号中的是一对元素,则是字典。
# 例:定义集合
# 空集合
a = set()
print(type(a)) # 结果:---><class 'set'>
# 虽然集合也是用{}表示,但是定义空集合时不能使用
# 错误示范
b = {}
print(type(b)) # 结果:---><class 'dict'>
# 定义非空集合
a = set('关于我学习python结果完不成任务这件事') # 只能设置一个参数,不能用逗号多设置参数。这样会把长字符串中每一个字符都作为集合中的一个元素。
print(a) # 结果:--->{'任', '成', '关', '完', 'o', '务', '结', '不', 't', 'n', '习', '我', '事', '件', '这', 'p', '于', 'y', '学', '果', 'h'}
b = {'大大怪', '小小怪', '猪猪侠'} # 可设置多个参数,多个参数的设置用逗号隔开
print(b) # 结果:--->{'大大怪', '小小怪', '猪猪侠'}
c = {0, 1, 9, 2, 8, 3, 7, 4, 6, 5, 5, 6, 6, 4, 4, 4} # 集合特点展示
print(c) # 结果:--->{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
集合的常见操作
添加元素
add:
- 添加元素的命令,添加已有元素时(重复元素)是无法添加的
update:
- 和字典中的update作用一样,用法也一样。相当于并集操作
# 例:添加元素
a = set()
b = {'we', 'are', 'family'}
print(a) # 结果:--->
print(b) # 结果:--->
a.add('boy')
a.add('girl')
a.add('father') # add也只能带一个参数,不能同时添加多个元素
a.add('mother')
a.add('girl') # 重复添加,但是输出结果只会有一个'girl'
a.add('sister')
print(a) # 结果:--->{'sister', 'girl', 'boy', 'father', 'mother'}
b.add(a) # add只能添加元素,不能添加其他类型的数据(列表、元组、字典)
print(b) # 结果:--->报错
b.update(a)#注意不要把追加对象弄反了
print(a) # 结果:--->{'sister', 'girl', 'boy', 'father', 'mother'}
print(b) # 结果:--->{'mother', 'sister', 'girl', 'boy', 'father', 'family', 'we', 'are'}
移除元素
remove:
- 移除指定元素,使用时要指明具体元素,如果在集合中不存在,那就会报错
# 例:移除元素-remove
a = {'mother', 'sister', 'girl', 'boy', 'father', 'family', 'we', 'are'}
a.remove('boy') # 正常演示
print(a) # 结果:--->{'father', 'girl', 'sister', 'family', 'are', 'we', 'mother'}
b = a.remove('sister') # 看删除时是否会赋值
print(b) # 结果:--->None :从结果上是会有一个返回值的,none
print(a) # 结果:--->{'father', 'girl', 'family', 'are', 'we', 'mother'}
a.remove('a') # 移除不存在的元素,看是否有报错
print(a) # 结果:--->报错 :有报错
c = a.remove('b') # 看赋值的结果是否与集合内的元素有关
print(c) # 结果:--->报错 :实际上返回的话也会是none,这一点可以用discar这个去看出来
discard:
- 与remove一样,删除指定元素,但是不会报错
# 例:移除元素-discard
a = {'mother', 'sister', 'girl', 'boy', 'father', 'family', 'we', 'are'}
a.discard('boy') # 正常演示
print(a) # 结果:--->{'father', 'girl', 'sister', 'family', 'are', 'we', 'mother'}
b = a.discard('sister') # 看删除时是否会赋值
print(b) # 结果:--->None :从结果上是会有一个返回值的,none
print(a) # 结果:--->{'father', 'girl', 'family', 'are', 'we', 'mother'}
a.discard('a') # 移除不存在的元素,看是否有报错
print(a) # 结果:--->{'father', 'girl', 'family', 'are', 'we', 'mother'}
c = a.discard('b') # 看赋值的结果是否与集合内的元素有关
print(c) # 结果:--->None :其实discard和remove是一样的,从这里就能看出携带值是无关于集合中的内容
clear:
- 清空集合,留下一个空集合,还能存入元素
# 例:移除元素-clear
a = {'mother', 'sister', 'girl', 'boy', 'father', 'family', 'we', 'are'}
b = a.clear()
print(a) # 结果:--->set()
print(b) # 结果:--->None
# 删除后还会剩下一个空集合,还是可以往集合a中存入元素
pop:
- 弹出元素。数字集合会弹出最小的数,字符集合随机弹出,字符与数字的混合集合看各种的占比,如果弹出数字绝对是弹出最小的数。弹出与删除的异同点在:弹出能带回返回值且删除元素,删除是带入目标删除元素。
# 例:移除元素-pop
a = {'mother', 'sister', 'girl', 'boy', 'father', 'family', 'we', 'are'}
a.pop()
print(a) # 结果:--->{'father', 'boy', 'mother', 'family', 'we', 'sister', 'are'}
b = a.pop()
print(a) # 结果:--->{'sister', 'father', 'we', 'boy', 'family', 'are'}
print(b) # 结果:--->mother
del:
- 消除集合,存储地址被消除,无法再存入元素
# 例:移除元素-del
a = {'mother', 'sister', 'girl', 'boy', 'father', 'family', 'we', 'are'}
del a
print(a) # 结果:--->报错 :直接报错,且报错原有是未定义‘a’这个变量
# del相比clear,del是直接把集合去除,而不是把集合中的所有元素去除。
集合中的交并差
- 交集-intersection()-对应符号:&(与符号)
- 并集-union()-对应符号:|(或符号)
- 差集-difference()-对应符号:-
# 例:集合中的交并差
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
c = {1, 3, 5, 7, 9}
# intersection-交集
print(a.intersection(b)) # 结果:--->{3, 4, 5}
# 交集的符号化表示运算
print(a & b) # 结果:--->{3, 4, 5}
# union-并集
print(b.union(c)) # 结果:--->{1, 3, 4, 5, 6, 7, 9}
# 并集的符号化表示运算
print(b | c) # 结果:--->{1, 3, 4, 5, 6, 7, 9}
# difference-差集
d = b.difference(c)
print(d) # 结果:--->{4, 6}
# 差集的符号化表示运算
e = b - c
print(e) # 结果:--->{4, 6}
# 集合的概念和数学中集合的概念差不多,然后交集、并集、差集,这些也和数学中的概念相识。
# 符号化是更简便的一种方式,并且这些符号和逻辑符有些相识,可以与逻辑符结合记忆理解。