- 集合框架 (第 01 篇) 源码分析:Collection 框架
- 集合框架 (第 10 篇) 源码分析:二叉树、平衡二叉树、二叉查
- 集合框架 (第 06 篇) 源码分析:哈希冲突(哈希碰撞)与解决
- 集合框架 (第 08 篇) 源码分析:HashMap、Hasht
- 集合框架 (第 09 篇) 源码分析:jdk1.7版 Concu
- 集合框架 (第 07 篇) 源码分析:jdk1.7版 HashM
- 集合框架 (第 02 篇) 源码分析:Map<K,V &g
- 集合框架 (第 04 篇) 源码分析:LinkedList
- 集合框架 (第 05 篇) 源码分析:Map<K, V&g
- 集合框架 (第 12 篇) 源码分析:jdk1.8版 Concu
1、什么是集合(set)
- 容器型数据类型,将{}作为容器标志,里面多个元素用逗号隔开;{元素1,元素2,元素3,...}
- 可变的(支持增删改)、无序(不支持下标操作)
- 集合中的元素:不可变,唯一的(自带去重)
1.1、空集合
- 注意:{}表示空字典
a = {}
print(type(a)) # <class 'dict'>
set1 = set()
print(type(set1)) # <class 'set'>
2、集合中的元素
set1 = {1, 2, 'aa', (10,)}
print(set1) # {'aa', 1, 2, (10,)}
# 证明集合元素不可变(传入可变元素会报错)
# set1 = {1,2,'aa',(10,),[12,2]}
# print(set1) # TypeError: unhashable type: 'list'
# 集合中的元素是唯一的(自带去重功能)
set1 = {1, 3, 4, 2, 4, 1, 6, 7}
print(set1) # {1, 2, 3, 4, 6, 7}
3、增删查
3.1、查
- 遍历集合
set1 = {3, 5, 2, 5, 23, 43, 1, 65, 13, 3, 2, 1, 12}
for x in set1:
print(x, end=', ') # 1, 2, 3, 65, 5, 43, 12, 13, 23,
print()
3.2、增
- 添加单个元素:集合.add() -- 在集合中添加指定元素
set1 = {3, 5, 2, 5, 23}
set1.add(10)
print(set1) # 1, 2, 3, 65, 5, 43, 12, 13, 23,
- 集合.update(序列) -- 将序列中所有的元素添加到集合中
set1 = {3, 5, 2, 5, 23}
set1.update('abd')
print(set1) # {2, 3, 5, 'a', 23, 'b', 'd'}
3.3、删
- 集合.remove(元素) -- 删除集合中指定元素,元素不存在会报错
- 集合.discard(元素) -- 删除集合中指定元素,元素不存在不会报错
set1 = {3, 5, 2, 5, 23}
set1.remove(2)
print(set1) # {3, 5, 23}
set1 = {3, 5, 2, 5, 23}
set1.discard(23)
print(set1) # {2, 3, 5}
3.4、改
傻孩子,既然选择了集合,就别想着改了
- 改只有先删除,再添加,所以删除完全没必要的。
4、相关操作
in/not in
set1 = {3, 5, 2, 5, 23}
print(2 in set1) # True
5、集合的数学运算
- 数学的集合运算:并集(|),交集(&),差集(-),对称差集(^),包含关系(>,<)
1)并集: 集合1|集合2 --> 将两个集合合并在一起产生一个新的集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8}
2)交集: 集合1&集合2 --> 获取两个集合的公共部分产生一个新的集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1 & set2) # {4, 5}
3)差集: 集合1-集合2 --> 集合1减去集合2剩下的部分产生一个新的集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1 - set2) # {1, 2, 3}
4)对称差集: 集合1^集合2 --> 获取集合1和集合2合并后去掉公共部分剩下的部分
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}
5)包含关系: 集合1>集合2 --> 判断集合1中是否包含集合2
包含关系: 集合2>集合1 --> 判断集合2中是否包含集合1
set1 = {1, 2, 3, 4, 5, 6, 7}
set2 = {5, 6, 7}
print(set1 > set2) # True
print(set1 < set2) # False
网友评论