Python 集合set内置函数与方法
集合(set)是一个无序的不重复元素序列。
1、创建集合
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
1.1、使用大括号{}
set_a = {'b', 'c', 'd', 'e', 'f', 'g'}
print(type(set_a),'\n',set_a)
#<class 'set'>
# {'f', 'c', 'g', 'd', 'b', 'e'}
1.2、使用set()函数
set_a = set(['b', 'c', 'd', 'e', 'f', 'g','g'])
print(type(set_a),'\n',set_a)
#<class 'set'>
# {'e', 'b', 'f', 'c', 'g', 'd'}
2、运算符
两个集合之间的计算有4种运算,分别是 -、|、&、^。
2.1、集合减法-
set_a = set(['b', 'c', 'd', 'e', 'f', 'g'])
set_b = set(['b', 'c', 'h', 'j', 'k', 'm'])
print(type(set_a - set_b),'\n',set_a - set_b)
print('set_a:',set_a)
print('set_b:',set_b)
#<class 'set'>
# {'g', 'e', 'f', 'd'}
#set_a: {'d', 'c', 'e', 'g', 'b', 'f'}
#set_b: {'j', 'c', 'b', 'k', 'm', 'h'}
set_a - set_b :返回集合 set_a 不在集合 set_b 中的元素,原集合set_a、set_b元素不变。
2.2 、集合并集|
set_a = set(['b', 'c', 'd', 'e', 'f', 'g'])
set_b = set(['b', 'c', 'h', 'j', 'k', 'm'])
print(type(set_a | set_b),'\n',set_a | set_b)
print('set_a:',set_a)
print('set_b:',set_b)
#<class 'set'>
# {'e', 'g', 'j', 'd', 'b', 'f', 'h', 'c', 'k', 'm'}
#set_a: {'e', 'g', 'd', 'b', 'f', 'c'}
#set_b: {'j', 'b', 'h', 'c', 'k', 'm'}
set_a | set_b :返回在集合 set_a 或在集合 set_b 中的元素,原集合set_a、set_b元素不变。
2.3 、集合交集&
set_a = set(['b', 'c', 'd', 'e', 'f', 'g'])
set_b = set(['b', 'c', 'h', 'j', 'k', 'm'])
print(type(set_a & set_b),'\n',set_a & set_b)
print('set_a:',set_a)
print('set_b:',set_b)
#<class 'set'>
# {'b', 'c'}
#set_a: {'e', 'g', 'd', 'b', 'f', 'c'}
#set_b: {'j', 'b', 'h', 'c', 'k', 'm'}
set_a & set_b :返回同时在集合 set_a 与 set_b 中的元素,原集合set_a、set_b元素不变。
2.4、集合 ^
set_a = set(['b', 'c', 'd', 'e', 'f', 'g'])
set_b = set(['b', 'c', 'h', 'j', 'k', 'm'])
print(type(set_a ^ set_b),'\n',set_a ^ set_b)
print('set_a:',set_a)
print('set_b:',set_b)
#<class 'set'>
# {'d', 'e', 'f', 'k', 'g', 'm', 'j', 'h'}
#set_a: {'e', 'g', 'd', 'b', 'f', 'c'}
#set_b: {'j', 'b', 'h', 'c', 'k', 'm'}
set_a ^ set_b :返回集合 set_a 与 set_b 所有元素,再去掉同时在集合 set_a 与 set_b中出现的元素,原集合set_a、set_b元素不变。
3、访问集合
无法通过引用索引来访问 set 中的项目,因为 set 是无序的,项目没有索引。
但是可以使用 for 循环遍历 set 项目,或者使用 in 关键字查询集合中是否存在指定值。
4、常用内置函数与方法
概述
名称 | 描述 |
len(set) | 返回集合的长度(去掉重复元素后的) |
del set | 删除集合,删除后不能再访问 |
set.add(item) | 将item添加到集合 |
set.update(set2) | 将set2或一个元素添加到set,重复元素只会出现一次 |
set.remove(item) | 移除集合中的指定元素item,移除一个不存在的元素时会发生错误。 |
set.discard(item) | 移除集合中的指定元素item,移除一个不存在的元素时不会发生错误。 |
set.pop() | 随机移除一个元素 |
set.clear() | 清空集合中的元素,之后将是空集合。 |
set.union(set1, set2 ...) | 返回两个集合元并集的新集合,重复的元素只会出现一次;原集合元素不会改变。 |
set.copy() | 用于拷贝一个集合 |
set.isdisjoint(set2) | 判断两个集合是否不包含相同的元素,无相同元素返回True,否则返回False |
set.intersection(set1, set2 ... etc) | 返回两个或更多集合中都包含的元素,即交集;返回的是新集合。原集合元素不改变。 |
set.intersection_update(set1, set2 ... etc) | 获取两个或更多集合中都重叠的元素,即计算交集,在原集合set上移除不重叠的元素。 |
set.issubset(set2) | 判断集合的所有元素是否都包含在指定集合中,如果set是set2的子集则返回 True,否则返回 False。 |
set.issuperset(set2) | 判断指定集合的所有元素是否都包含在原始的集合中,如果set是set2的超集则返回 True,否则返回 False。 |
set.difference(set2) | 返回集合的差集,即返回的是新集合,元素包含在第一个集合中,但不包含在第二个集合中。原集合set、set2元素不改变。 |
set.difference_update(set2) | 在集合set移除两个集合中都存在的元素。集合set2元素不改变。 |
set.symmetric_difference(set2) | 返回新集合,将两个集合做并集处理,再移除交集元素,即会移除两个集合中都存在的元素。原集合set、set2元素不改变。 |
set.symmetric_difference_update(set2) | 移除集合set中在集合set2相同的元素,并将集合set2中不同的元素插入到集合set中。集合set元素改变,集合set2元素不改变。 |
4.1、 len()函数
计算集合元素数量,返回的是去除重复的元素数量。
语法
len(set)
4.2 、del()函数
集合删除
语法
del set
注意:使用完del()函数删除集合后,不能再使用了,否则会报错NameError: name 'fruit' is not defined。
4.3、add()方法-添加元素
add() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
语法
set.add(element)
参数 描述
element 必需。要添加到集合的元素。
如果该元素已存在,则 add() 方法就不会添加元素。
4.3、updata()方法-添加元素
update() 方法用于修改当前集合,添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
语法
set.update(set)
参数 描述
set 必需。插入当前集合的集合或一个元素。
实例
set_a = set(['b', 'c', 'd', 'e', 'g', 'g'])
print('set:',set_a)
set_a.update('h')
print('set2:',set_a)
set_b = set(['b', 'c', 'h', 'j', 'k', 'm'])
set_a.update(set_b)
print('set3:',set_a)
#set: {'c', 'b', 'g', 'd', 'e'}
#set2: {'c', 'b', 'g', 'd', 'e', 'h'}
#set3: {'c', 'k', 'b', 'g', 'd', 'j', 'm', 'e', 'h'}
4.4、remove()方法-移除元素
remove() 方法用于移除集合中的指定元素。
该方法不同于 discard() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
语法
set.remove(item)
参数 描述
item 必需。需要检索并删除的项目。
实例
set_a = set(['b', 'c', 'd', 'e', 'g', 'g'])
print('set:',set_a)
set_a.remove('e')
print('set2:',set_a)
set_a.remove('h')
#移除不存在的元素会报错
#set: {'d', 'g', 'c', 'e', 'b'}
#set2: {'d', 'g', 'c', 'b'}
4.5、discard()方法-移除元素
discard() 方法用于移除指定的集合元素。
该方法不同于 remove() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
语法
set.discard(item)
参数 描述
value 必需。要检索并删除的项目。
实例
set_a = set(['b', 'c', 'd', 'e', 'g', 'g'])
print('set:',set_a)
set_a.discard('e')
print('set2:',set_a)
set_a.discard('h')
print('set3:',set_a)
#set: {'c', 'd', 'b', 'e', 'g'}
#set2: {'c', 'd', 'b', 'g'}
#set3: {'c', 'd', 'b', 'g'}
4.6、pop()方法 - 移除元素
pop() 方法将删除最后一个元素;因集合set是无序的,是随机移除一个元素。空集合使用此方法会报错。
语法
set.pop()
无参数。
实例
set_a = set(['b', 'c', 'd', 'e', 'g', 'g'])
print('set:',set_a)
set_a.pop()
print('set2:',set_a)
set_a.pop()
print('set3:',set_a)
#set: {'g', 'e', 'c', 'd', 'b'}
#set2: {'e', 'c', 'd', 'b'}
#set3: {'c', 'd', 'b'}
4.7、clear()方法-清空集合
clear() 方法用于移除集合中的所有元素。del 功能是删除集合。
语法
set.clear()
参数值
无参数。
4.8、union()方法-合并集合
union() 方法返回两个集合元并集的新集合,即包含了所有集合的元素,重复的元素只会出现一次;原集合元素不会改变。也可以使用 update() 方法将一个集合中的所有项目插入另一个集合中。
语法
set.union(set1, set2 ...)
参数 描述
set1 必需。要整合的集合。
set2 可选。要整合的另一集合。您能够比较任意多的集合。集合由逗号分隔。
实例
set_a = set(['b', 'c', 'd', 'e', 'g'])
set_b = set(['b', 'c', 'h', 'j', 'k', 'm'])
set_c = set('123')
set_d = set_a.union(set_b,set_c)
print('Union:',set_d)
print('set_a:',set_a)
print('set_b:',set_b)
print('set_c:',set_c)
#Union: {'d', 'j', '3', 'k', '1', 'c', 'h', 'e', 'm', '2', 'g', 'b'}
#set_a: {'d', 'c', 'e', 'g', 'b'}
#set_b: {'j', 'k', 'c', 'h', 'm', 'b'}
#set_c: {'3', '1', '2'}
4.9、copy()方法 - 拷贝集合
copy() 方法用于拷贝一个集合。
语法
set.copy()
无参数。
4.10、isdisjoint()方法-判断是否包含相同元素
isdisjoint() 方法用于判断两个集合不包含相同的元素,如果不包含返回 True,否则返回 False。
语法
set.isdisjoint(set2)
参数 描述
set 必需。要在其中检索相同项目的集合。
实例
set_a = set(['b', 'c', 'd', 'e', 'g'])
set_b = set(['b', 'c', 'h', 'j', 'k', 'm'])
set_c = set('123')
result = set_a.isdisjoint(set_c)
print('result:',result)
#result: True
4.11、 intersection() 方法-返回交集
intersection() 方法用于返回两个或更多集合中都包含的元素,即交集;返回的是新集合。原集合元素不改变。
语法
set.intersection(set1, set2 ... etc)
参数 描述
set1 必需。要在其中检索相同项目的集合。
set2 可选。其他需要在其中检索相同项目的集合。您可以比较任意多的集合。集合之间由逗号分隔。
4.12、intersection_update()方法-返回交集
intersection_update() 方法,在集合set上仅保留两个或更多集合中都重叠的元素,即计算交集。只改变集合set的元素,其他集合元素不改变。
语法
set.intersection_update(set1, set2 ... etc)
参数 描述
set1 必需。要在其中检索相等项目的集合。
set2 可选。要在其中检索相等项目的另一集合。您能够比较任意多的集合。集合由逗号分隔。
实例
set_a = set(['b', 'c', 'd', 'e', 'g'])
set_b = set(['b', 'c', 'h', 'j', 'k', 'm'])
result = set_a.intersection_update(set_b)
print('result:',result)
print('set_a:',set_a)
print('set_b:',set_b)
#result: None
#set_a: {'c', 'b'}
#set_b: {'h', 'm', 'j', 'b', 'k', 'c'}
集合set_a移除了不相同的元素,集合set_b中的元素不改变。
注:
intersection_update() 方法不同于 intersection() 方法,因为 intersection() 方法是返回一个新的集合,而 intersection_update() 方法是在原始的集合上移除不重叠的元素。
4.13、 issubset() -判断子集
issubset() 方法用于判断集合的所有元素是否都包含在指定集合中,如果set是set2的子集则返回 True,否则返回 False。
语法
set.issubset(set2)
参数 描述
set 必需。在其中检索相等项目的集合。
4.14、issuperset()-判断超集
issuperset() 方法用于判断指定集合的所有元素是否都包含在原始的集合中,如果set是set2的超集则返回 True,否则返回 False。
语法
set.issuperset(set2)
参数 描述
set 必需。要在其中检索相等项目的集合。
实例
set_a = set('123456')
set_b = set('123')
result = set_b.issubset(set_a)
result2 = set_a.issuperset(set_b)
print('result:',result)
print('result2:',result2)
print('set_a:',set_a)
print('set_b:',set_b)
#result: True
#result2: True
#set_a: {'2', '1', '5', '6', '4', '3'}
#set_b: {'1', '3', '2'}
4.15、 difference() -差集
difference() 方法用于返回集合的差集,即返回的是新集合,元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中。原集合set、set2元素不改变。
语法
set.difference(set2)
参数 描述
set 必需。要检查其中差异的项目。
4.16、difference_update()-差集
difference_update() 方法在集合set移除两个集合中都存在的元素。集合set2元素不改变。
语法
set.difference_update(set2)
参数 描述
set 必需。要检查其中差异的集合。
实例
set_a = set('123456')
set_b = set('123789')
result = set_a.difference(set_b)
print('difference result:',result)
print('set_a:',set_a)
print('set_b:',set_b)
set_a = set('123456')
set_b = set('123789')
result = set_a.difference_update(set_b)
print('difference_update result:',result)
print('set_a:',set_a)
print('set_b:',set_b)
#difference result: {'5', '6', '4'}
#set_a: {'5', '3', '1', '6', '4', '2'}
#set_b: {'8', '3', '9', '7', '1', '2'}
#difference_update result: None
#set_a: {'5', '6', '4'}
#set_b: {'8', '3', '9', '7', '1', '2'}
difference_update() 方法与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。
4.17、 symmetric_difference()-移除交集元素
symmetric_difference() 方法返回新集合,将两个集合做并集处理,再移除交集元素,即会移除两个集合中都存在的元素。原集合set、set2元素不改变。
语法
set.symmetric_difference(set2)
参数 描述
set 必需。用于检查匹配项的集合。
4.18、 symmetric_difference_update()-移除交集元素
symmetric_difference_update() 方法移除集合set中在集合set2相同的元素,并将集合set2中不同的元素插入到集合set中。集合set元素改变,集合set2元素不改变。
语法
set.symmetric_difference_update(set2)
参数 描述
set 必需。用于检查匹配项的集合。
实例
set_a = set('123456')
set_b = set('123789')
result = set_a.symmetric_difference(set_b)
print('symmetric result:',result)
print('set_a:',set_a)
print('set_b:',set_b)
set_a = set('123456')
set_b = set('123789')
result = set_a.symmetric_difference_update(set_b)
print('symmetric_update result:',result)
print('set_a:',set_a)
print('set_b:',set_b)
#symmetric result: {'6', '7', '4', '5', '8', '9'}
#set_a: {'4', '5', '3', '6', '1', '2'}
#set_b: {'8', '3', '7', '1', '9', '2'}
#symmetric_update result: None
#set_a: {'4', '8', '5', '7', '6', '9'}
#set_b: {'8', '3', '7', '1', '9', '2'}
————————————————————————————————————
参考文章:https://blog.csdn.net/m0_70885101/article/details/125948550