1、特性
集合(set)是一个无序的不重复的元素序列。
可以使用大括号{}或者set()函数创建集合。
注意:创建一个空集合必须使用set()而不是{},与空字典有区别。
包含的操作如下表:
方法 | 描述 |
---|---|
add (x) | 为集合添加元素 |
update(x) | 为集合添加元素,x可以为列表,元组,字典、字符串(会分隔字符串进行添加,如:“张三”,会拆分成“张”、“三”两个元素进行添加。很高端) |
clear() | 移除集合中的所有元素 |
discard(x) | 删除集合中指定的元素,元素不存在,不会报错 |
remove(x) | 删除集合中指定的元素,元素不存在,会报错KeyError |
pop() | 随机删除一个元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在 |
union() | 返回两个集合并集 |
intersection() | 返回两个集合的交集,生成新的集合 |
intersection_update() | 两个集合的交集,集合的交并是在原集合的基础上进行的,没有生成新的集合,无返回值 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。* -切记注意返回值- * |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
symmetric_difference() | 返回两个集合中不重复的元素集合。 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
2、案例
由于案例太多了,就不一一介绍,直接看完整代码吧,所有方法的调用都包含了,可以直接拷贝运行。
# 声明一个集合
mySet = set(("张三", "李四", "王五")) # 方式1
mySet2 = {"张三", "李四", "王五"} # 方式2
print("mySet集合原始数据:", mySet)
print("mySet2集合原始数据:", mySet2)
# 判断元素是否存在
isExist = "张三1" in mySet
print("判断元素是否存在:", isExist)
# 添加元素
mySet.add("老大")
print("添加一个元素:", mySet)
# 添加列表
mySet.update({"张三", "老大", "老二"})
print("添加一个列表:", mySet)
# 添加字符串
mySet.update("老三")
print("添加一个字符串:", mySet)
print("1、最新的mySet集合:", mySet)
print("1、最新的mySet2集合:", mySet2)
# 两个集合交集
print("两个集合交集:", mySet.intersection(mySet2))
# 注意无返回的交集,直接更改mySet集合的值,【这个操作请最后运行,不然后面的操作看不到结果】
# mySet.intersection_update(mySet2)
# print("两个集合交集:",mySet)
# 返回两个集合中不重复的元素
print("mySet与mySet2不重复的元素:", mySet.symmetric_difference(mySet2))
# 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
# 注意没有返回值,直接在mySet集合上进行更新操作【这个操作请最后运行,不然后面的操作看不到结果】
# mySet.symmetric_difference_update(mySet2)
# print("mySet与mySet2不重复的元素2:",mySet)
print("2、最新的mySet集合:", mySet)
print("2、最新的mySet2集合:", mySet2)
# 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False
print("两个集合是否包含相同的元素:", mySet.isdisjoint(mySet2))
# 判断指定集合是否为该方法参数集合的子集
print("mySet是否为mySet2的子集:", mySet.issubset(mySet2))
# 判断该方法的参数集合是否为指定集合的子集
print("mySet2是否为mySet的子集:", mySet.issuperset(mySet2))
# 返回两个集合的差集
print("mySet与mySet2的差集:", mySet.difference(mySet2))
# 直接在原来的集合中移除元素,没有返回值,多的移除少的
mySet.difference_update(mySet2)
print("mySet移除mySet2的差集:", mySet)
print("3、最新的mySet集合:", mySet)
print("3、最新的mySet2集合:", mySet2)
# 两个集合取并集
print("两个集合并集:", mySet.union(mySet2))
# 随机删除一个元素
mySet.pop()
print("随机删除一个元素:", mySet)
# 清空
mySet.clear()
print("清空集合:", mySet)
# 删除不存在的元素不报错
mySet.discard("战三")
# 删除不存在的元素报错KeyError
mySet.remove("战三")
输出:
mySet集合原始数据: {'王五', '李四', '张三'}
mySet2集合原始数据: {'王五', '李四', '张三'}
判断元素是否存在: False
添加一个元素: {'王五', '老大', '李四', '张三'}
添加一个列表: {'王五', '李四', '老大', '老二', '张三'}
添加一个字符串: {'王五', '李四', '老大', '老二', '三', '老', '张三'}
1、最新的mySet集合: {'王五', '李四', '老大', '老二', '三', '老', '张三'}
1、最新的mySet2集合: {'王五', '李四', '张三'}
两个集合交集: {'王五', '李四', '张三'}
mySet与mySet2不重复的元素: {'老大', '老二', '三', '老'}
2、最新的mySet集合: {'王五', '李四', '老大', '老二', '三', '老', '张三'}
2、最新的mySet2集合: {'王五', '李四', '张三'}
两个集合是否包含相同的元素: False
mySet是否为mySet2的子集: False
mySet2是否为mySet的子集: True
mySet与mySet2的差集: {'老二', '三', '老', '老大'}
mySet移除mySet2的差集: {'老大', '老二', '三', '老'}
3、最新的mySet集合: {'老大', '老二', '三', '老'}
3、最新的mySet2集合: {'王五', '李四', '张三'}
两个集合并集: {'王五', '李四', '老大', '老二', '三', '老', '张三'}
随机删除一个元素: {'老二', '三', '老'}
清空集合: set()
Traceback (most recent call last):
File "E:/pythonWorkplace/venv/TestSet.py", line 80, in <module>
mySet.remove("战三")
KeyError: '战三'
3、总结
mySet.isdisjoint(mySet2) 这个方法一定要注意:
返回值为True,说明mySet与mySet2集合没有相同的元素;
返回值为False,说明mySet与mySet2集合有至少一个以上相同的元素存在。
取交集、差集、不重复的元素集合调用带有_update()后缀的方法时,往往都是没有返回值的,而且不会新创建集合,直接在原集合中合并元素。
mySet.update(x)函数调用的时候要注意,当x为字符串的时候,会将字符串分隔成一个一个的字符,进行元素添加,如:“张三”,会拆分成“张”、“三”两个元素进行添加。很高端