hello,我是啥都生,本期将Python中集合涉及的从基础到进阶用法,全部总结归纳,一起看看吧
集合是一个无序的且元素不重复的序列,依然从创建开始说起,可以使用大括号与set函数创建集合,但需注意的是,若定义空集合,不能使用大括号,因为将变成字典
set1 = set()
set2 = {}
set3 = {1}
print(type(set1))
print(type(set2))
print(type(set3))
>>> <class 'set'>
>>> <class 'dict'>
>>> <class 'set'>
如下所示很好的展示了集合无序与元素不重复两大特性
set1 = {'h', 'e', 'l', 'l', 'o'}
print(set1)
>>> {'h', 'o', 'l', 'e'}
使用set函数也可以轻松将列表与字符串类型转换为集合,但注意输出格式
set1 = set([1, 2, 3])
set2 = set("hello")
print(set1)
print(set2)
>>> {1, 2, 3}
>>> {'h', 'o', 'e', 'l'}
使用add
往集合中添加元素,集合支持不同类型数据共存
set1 = set()
set1.add(1)
set1.add("a")
set1.add(3.14)
print(set1)
>>> {1, 3.14, 'a'}
此外,使用update
也可以完成添加,参数可以是列表,元组,字典等,且支持多个数据同时添加,用逗号隔开即可
set1 = set()
set2 = set()
data1 = [1, 2, 3]
data2 = (4, 5)
set1.update(data1)
set1.update(data2)
set2.update(data1, data2)
print(set1, set2)
>>> {1, 2, 3, 4, 5} {1, 2, 3, 4, 5}
使用remove
删除指定元素
set1 = {1, 2, 3}
set1.remove(3)
print(set1)
>>> {1, 2}
当试图删除集合中不存在的元素时会引发错误
set1 = {1, 2, 3}
set1.remove(4)
>>> Traceback (most recent call last):
File "script.py", line 3, in <module>
set1.remove(4)
KeyError: 4
Exited with error status 1
换种方式,使用discard
方法拥有同样删除功能,但删除不存在的元素时不会引起错误
set1 = {1, 2, 3}
set1.discard(4)
print(set1)
>>> {1, 2, 3}
此外,集合内置方法也支持pop
,但其作用是随机删除
集合中的元素
set1 = {1, 2, 3}
set1.pop()
print(set1)
>>> {2, 3}
使用clear
清空集合中的所有元素,但保留该集合对象
set1 = {1, 2, 3}
set1.clear()
print(set1)
>>> set()
使用-
获取集合1中包含而集合2中不包含的元素,即求差集
set1 = {1, 2, 3}
set2 = {2, 3, 4}
output = set1 - set2
print(output)
>>> {1}
使用内置方法difference
也可以达到与两个或多个集合求差集的目的
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
output = set1.difference(set2, set3)
print(output)
>>> {1}
使用difference_update
方法用于移除两个或多个集合中重复的元素,与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
output = set1.difference_update(set2, set3)
print(output)
print(set1)
>>> None
>>> {1}
使用|
获取两个集合中包含的所有元素,即求并集
set1 = {1, 2, 3}
set2 = {2, 3, 4}
output = set1 | set2
print(output)
>>> {1, 2, 3, 4}
使用内置方法union
也可以达到与单个或多个集合求并集的目的
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
output = set1.union(set2, set3)
print(output)
>>> {1, 2, 3, 4, 5}
使用&
获取两个集合中同时包含的元素,即求交集
set1 = {1, 2, 3}
set2 = {2, 3, 4}
output = set1 & set2
print(output)
>>> {2, 3}
使用内置方法intersection
也可以与两个或多个集合求交集
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
output = set1.intersection(set2, set3)
print(output)
>>> {3}
使用intersection_update
方法也能完成该任务,区别是intersection_update 方法直接在原来的集合中添加元素,没有返回值。
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
output = set1.intersection_update(set2, set3)
print(output)
print(set1)
>>> None
>>> {3}
使用^
获取不同时包含于两个集合中的元素
set1 = {1, 2, 3}
set2 = {2, 3, 4}
output = set1 ^ set2
print(output)
>>> {1, 4}
使用内置方法symmetric_difference
也可以达到目的,而不支持与多个集合进行操作
set1 = {1, 2, 3}
set2 = {2, 3, 4}
output = set1.symmetric_difference(set2)
print(output)
>>> {1, 4}
使用symmetric_difference_update
方法也能完成求补集任务,区别是它直接在原来的集合中操作,没有返回值。
set1 = {1, 2, 3}
set2 = {2, 3, 4}
output = set1.symmetric_difference_update(set2)
print(output)
print(set1)
>>> None
>>> {1, 4}
使用isdisjoint
判断两个集合是否包含相同的元素,没有包含则返回 True,否则返回 False
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {5, 6}
output1 = set1.isdisjoint(set2)
output2 = set1.isdisjoint(set3)
print(output1)
print(output2)
>>> False
>>> True
使用issubset
判断某集合是否为原始集合的子集,是则返回 True,否则返回 False
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {2, 3}
output1 = set2.issubset(set1)
output2 = set3.issubset(set1)
print(output1)
print(output2)
>>> False
>>> True
使用issuperset
判断原始集合是否为某集合的父集,是则返回 True,否则返回 False,注意与前一个方法的区别
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {1, 2}
output1 = set1.issuperset(set2)
output2 = set1.issuperset(set3)
print(output1)
print(output2)
>>> False
>>> True
由于集合是可变的,使用copy
完成拷贝
set1 = {1, 2, 3}
set2 = set1
set3 = set1.copy()
set1.add(4)
print(set2)
print(set3)
>>> {1, 2, 3, 4}
>>> {1, 2, 3}
使用in
判断某元素是否在集合中,需特别注意,集合是无序且不可重复的,查找元素方式为哈希。即某元素通过哈希计算,位置永远固定(元素顺序不按输入顺序,按哈希位置),通过哈希可一次找到该元素。而列表需逐个遍历,时间复杂度高。
set1 = {1, 2, 3}
if 2 in set1:
print(True)
>>> True
与列表一样,同样支持遍历
set1 = {1, 2, 3}
for i in set1:
print(i)
>>> 1
2
3
同时也支持推导式
set1 = {1, 2, 3}
set2 = {i for i in set1}
set3 = {i for i in set1 if i % 2}
print(set2)
print(set3)
>>> {1, 2, 3}
>>> {1, 3}