python--集合(十六)
一、创建集合
# 集合
'''
集合特性
1、无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序。但就集合本身的特性而言,元素之间没有必然的序。
2、互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
有时需要对同一元素出现多次的情形进行刻画,可以使用多重集,其中的元素允许出现多次。
3、确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。
'''
# 创建普通的集合,要创建集合,需要将所有项(元素)放在花括号({})内,以逗号(,)分隔。
num = {1,2,3,4,5} # 整形的集合
print(type(num))
num = {1.2,'google',(1,2,4)} # 混合类型的集合
print(num) #{1.2, 'google', (1, 2, 4)}
# set创建集合
s = set([1,2,3,4,5,6,7,8])
print(s)
#创建空集合
s =set()
print(s)
# 冻结的集合 不能随意修改里面的元素 frozenset
fset =frozenset([1,2,3,4,5,6])
print(fset)
# 子集:子集,为某个集合中一部分的集合,故亦称部分集合。使用操作符 < 执行子集操作,同样地,也可使用方法 issubset() 完成。
s1 = set([1,2,3,4,5])
s2 = set([1,2,3])
print(s2<s1) # True
print(s2.issubset(s1)) #True
# 并集 一组集合的并集是这些集合的所有元素构成的集合,而不包含其他元素。
#使用操作符 | 执行并集操作,同样地,也可使用方法 union() 完成。
s1 = set([1,2,3,4,5])
s2 = set([1,2,3])
print(s1|s2) #{1, 2, 3, 4, 5}
print(s1.union(s2)) #{1, 2, 3, 4, 5}
'''
两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合。
使用 & 操作符执行交集操作,同样地,也可使用方法 intersection() 完成。
'''
s1 = set([1,2,3,4,5])
s2 = set([1,2,3])
print(s1&s2) # {1, 2, 3}
print(s1.intersection(s2)) #{1, 2, 3}
'''
差集
A 与 B 的差集是所有属于 A 且不属于 B 的元素构成的集合
使用操作符 - 执行差集操作,同样地,也可使用方法 difference() 完成。
'''
s1 = set([1,2,3,4,5])
s2 = set([1,2,3])
print(s1-s2) # {4, 5}
print(s1.difference(s2)) # {4, 5}
'''
对称集
两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。
使用 ^ 操作符执行差集操作,同样地,也可使用方法 symmetric_difference() 完成。
'''
s1 = set([1,2,3,4,5])
s2 = set([1,2,3])
print(s1^s2) # {4, 5}
print(s1.symmetric_difference(s2)) #{4, 5}
'''
集合元素的添加和删除
'''
s1 = set([1,2,3,4,5])
s1.add(6) #添加一个元素
print(s1) #{1, 2, 3, 4, 5, 6}
s1.update([7,8,9]) # 添加多个元素
print(s1) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
'''
删除元素
可以使用 discard() 和 remove() 方法删除集合中特定的元素。
两者之间唯一的区别在于:如果集合中不存在指定的元素,使用 discard() 保持不变;但在这种情况下,remove() 会引发 KeyError。
'''
s1 = set([1,2,3,4,5])
s1.discard(3) #去掉一个元素
print(s1) #{1, 2, 4, 5}
s1.remove(2) # 删除一个元素
print(s1) #{1, 4, 5}
s1.discard(3) # 去掉一个不存在的元素(正常)
print(s1) # {1, 4, 5}
# s1.remove(3) 删除一个不存在的元素(引发错误) KeyError: 3
二、集合的常用方法
方法 | 描述 |
add() | 将元素添加到集合中 |
clear() | 删除集合中的所有元素 |
copy() | 返回集合的浅拷贝 |
difference() | 将两个或多个集合的差集作为一个新集合返回 |
difference_update() | 从这个集合中删除另一个集合的所有元素 |
discard() | 删除集合中的一个元素(如果元素不存在,则不执行任何操作) |
intersection() | 将两个集合的交集作为一个新集合返回 |
intersection_update() | 用自己和另一个的交集来更新这个集合 |
isdisjoint() | 如果两个集合有一个空交集,返回 True |
issubset() | 如果另一个集合包含这个集合,返回 True |
issuperset() | 如果这个集合包含另一个集合,返回 True |
pop() | 删除并返回任意的集合元素(如果集合为空,会引发 KeyError) |
remove() | 删除集合中的一个元素(如果元素不存在,会引发 KeyError) |
symmetric_difference() | 将两个集合的对称差作为一个新集合返回 |
symmetric_difference_update() | 用自己和另一个的对称差来更新这个集合 |
union() | 将集合的并集作为一个新集合返回 |
update() | 用自己和另一个的并集来更新这个集合 |
三、集合内置函数
函数 | 描述 |
all() | 如果集合中的所有元素都是 True(或者集合为空),则返回 True。 |
any() | 如果集合中的所有元素都是 True,则返回 True;如果集合为空,则返回 False。 |
enumerate() | 返回一个枚举对象,其中包含了集合中所有元素的索引和值(配对)。 |
len() | 返回集合的长度(元素个数) |
max() | 返回集合中的最大项 |
min() | 返回集合中的最小项 |
sorted() | 从集合中的元素返回新的排序列表(不排序集合本身) |
sum() | 返回集合的所有元素之和 |