Python—第9天—集合
集合
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建
一个空字典。集合应该满足以下特性:
- 无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
- 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
- 确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。
创建集合
set1 = {1, 5, 2, 4, 2, 3, 3, 0}
print(set1, len(set1))
# 创建空集合
set2 = set()
print(type(set2))
遍历集合
for elem in set1:
print(elem)
集合的运算
成员运算
set1 = {1, 2, 3, 5, 7, 8, 9}
set2 = {2, 4, 6, 8}
# 成员运算 - 确定性(元素要么在集合中,要么不在集合中)
# 集合的成员运算在效率上是远远高于列表的成员运算
print(1 in set1)
print(1 not in set1)
交并差运算
对集合求并集、交集、差集以及对称差
set1 = {1, 2, 3, 5, 7, 8, 9}
set2 = {2, 4, 6, 8}
# 交集
print(set1 & set2)
# 并集
print(set1 | set2)
# 差集
print(set1 - set2)
print(set2 - set1)
# 对称差
print(set1 ^ set2)
print((set1 | set2) - (set1 & set2))
比较判断
set1 = {1, 2, 3, 5, 7, 8, 9}
set2 = {2, 4, 6, 8}
set3 = {1, 2, 3, 4, 5, 6, 7, 8, 9}
# 判断真子集
print(set1 < set3)
# 判断子集
print(set1 <= set3)
# 判断超集
print(set3 > set2)
集合的操作(方法)
Python中的集合是可变类型,我们可以通过集合类型的方法为集合添加或删除元素。
集合底层使用的是哈希存储,通过计算元素的哈希码来决定元素存储的位置,这是一种高效率的存储方案。
哈希存储的关键是设计一个好的哈希函数,尽量保证不同的对象能够计算出不同的哈希码。
可变容器(列表、集合、字典)都无法计算哈希码,因此都不能放到集合中,作为集合的元素。
添加元素
set1 = {'apple', 'banana', 'pitaya', 'apple'}
# 添加元素
set1.add('durian')
set1.add('grape')
print(set1)
删除元素
# 删除元素
set1.discard('pitaya')
print(set1.pop())
print(set1.pop())
print(set1)
集合是无序的,因此在使用 pop() 方法时,不知道删除的是哪个项目,它是随机删除。
如果要删除的项目不存在,则 discard() 不会引发错误。
清空元素
# 清空
set1.clear()
print(set1)