集合
在实际应用场景中,我们经常会遇到一些统计情况,比如说篮球队和足球队有哪些人,现在我有两个列表,分别记录了篮球队的人员和足球队的人员,但是张三和李四参加了两个队,合并两个表则会记录两次,我们该怎么办呢?
下面我们来讲一下集合:
这里的集合和我们在数学中学的集合是差不多的,有相同的特性:
1.去重
2.关系测试
具体请看如下代码:
# 集合的两个重要特性:1.去重;2.关系测试
list_1 = [1,3,5,7,6,7,3]
list_1 = set(list_1) # 将列表转为集合,重复的只保留一个
print(list_1)
# 关系测试
list_2 = set([2,4,6,8,1])
print(list_1.intersection(list_2)) # 求交集
print(list_1.union(list_2)) # 求并集
print(list_1.difference(list_2)) # 求差集(1中有而2中没有的项)
list_3 = set([1,3])
print(list_3.issubset(list_1)) #3是否是1的子集
print(list_1.issuperset(list_3)) # 1是否是3的父集
print(list_1.symmetric_difference(list_2)) # 对称差集:取两个集合中的不同项,去掉交集
print(list_1.isdisjoint(list_2)) # 判断两个集合是否有交集,无交集为True
# 关系测试的符号表示
print(list_1 & list_2) # 交集
print(list_1 | list_2) # 并集
print(list_1 - list_2) # 差集
print(list_1 ^ list_2) # 对称差集
# 集合的基本操作:增删改查,方法和列表基本相同,不再赘述
# 集合无序,没有插入
# 增
list_1.add(9) # 添加一项
list_1.update(11,22,33) # 添加多项
# 删
list_1.pop() # 由于无序,随机删除并返回元素
list_1.remove("xxx") # 删除指定元素并返回,不存在则报错
list_1.discard("xxx") # 删除指定元素,不返回,不报错
这里再提醒一下大家,集合中的元素是不能有可变对象的,如下:
set_1 = set([1,(2,3),4])
set_2 = set([1,(2,[3,4]),5])
print(set_1)
可以含有元组,但是任何一个其子成员也不可以是可变对象。