大数据学习路线 学习笔记 Day7
继续数据容器篇
一、set集合
set和dict类似,也是一组key的集合,但不存储value,由于key不能重复,所以,在set中,没有重复的key,所以经常用于需要去重的场景。
set集合的特点:无序、元素不能重复、可变的、适用于需要去重的场景
1.set集合的创建
创建一个set集合,可以使用花括号 { } 或者是 set( ) 方法进行创建。
但是空集合只能使用set( ) 方法!!!!
示例:
# 创建set集合
#使用 { }
set1={6,5,1,2,3,4,7,9}
print(set1)
print(type(set1))
#使用set() 方法
set2=set([1,5,6,7,2,9])
print(set2)
print(type(set2))
# 创建空集合,必须使用 set()
set3={}
print(type(set3)) #使用{ } ,创建的是一个空字典
set4=set()
print(type(set4))
1.因为set集合是无序的数据容器,所以创建时输入元素的顺序与打印出来的不同。虽然看似经过了排序,但其实还是无序的。
2.使用set( )方法创建集合时,需要用中括号 [ ] 导入元素。
3.创建空集合时,不能使用花括号,因为 object={ } 是字典类型,为了区分,只能使用set()方法创建空集合。
无序的证明:
#尝试用下标提取集合内元素
set1={6,5,1,2,3,4,7,9}
print(set1[2])
使用下标取元素,直接报错,证明无序!
2.set集合常见方法
方法 | 作用 |
---|---|
add | 向set集合中添加元素,若存在则去重,不存在则添加 |
pop | 随机移除一个元素,因为set集合是无序的 |
remove | 从set集合中移除元素,若不存在则报错 |
discard | 同remove,也能移除元素,但当其不存在时,不会报错 |
intersection | 返回两个集合的交集 |
union | 返回两个集合的并集 |
difference | 返回两个集合的差集 |
增删操作示例:
set1={6,5,1,2,3,4,7,9}
# 增加一个元素
set1.add(1)
set1.add(8)
print(set1)
# 元素存在则会被去重,不存在则添加
print('*'*20)
# 移除元素,随机的
set1.pop()
set1.pop()
print(set1)
set1.remove(9)
print(set1)
使用remove移除元素时,元素不存在即会报错:
set1={6,5,1,2,3,4,7,9}
# 使用remove移除时,元素不存在,也会报错
set1.remove(10)
# 可以使用discard进行安全的移除
set1.discard(10)
discard可以进行安全的移除,即使元素不存在,也不会报错。我们点进discard方法的说明,可以看到:
查改操作示例:
# 修改和查询
# 因为集合是无序的,无法直接定位到某个元素,所以无法直接修改,可以先移除,再添加。
set1={6,5,1,2,3,4,7,9}
set1.discard(9)
set1.add(8)
print(set1)
# 删除了元素9,添加了元素8,等于把9修改为8
# 查询: 元素在不在集合内
print(6 in set1)
print(10 in set1) #这种方式对于列表,元组,字典,集合通用
1.因为集合是无序的,无法直接定位到某个元素,所以无法直接修改,可以先移除,再添加。
2. (xxx in object )这种方法可以查询xxx元素是否存在在容器内,返回布尔值,这种方法对列表,元组,字典,集合都适用。
集合运算方法
集合的运算是集合区别于其他数据容器的重要的一点,只有集合有这种运算方法,示例:
set1={6,5,1,2,3,4,7,9}
set2={4,6,3,5,10,65,477}
# 交集
print(set1.intersection(set2))
# 并集
print(set1.union(set2))
# 差集
print(set1.difference(set2))
print(set2.difference(set1))
# 判断是否为子集
set3={4,5,6}
print(set1.issuperset(set3))
print(set2.issuperset(set3))
# 判断是否为父集
print(set1.issubset(set3))
print(set2.issubset(set3))
1.交集返回的是两个集合共有的元素
2.并集返回的是两个集合合并起来所有元素(去重后的)
3.差集返回difference( )括号内集合没有的,而前面的集合特有的。
或者理解为先删除两个集合共有的元素,然后返回删除后的set1
4.issuperset( )方法判断括号内集合是否是前面集合的子集,返回布尔值
5.issubset( )方法判断括号内集合是否是前面集合的父集,返回布尔值
至此,数据容器知识点整理结束。