一、集合的定义
集合:是一个无序的没有重复元素的序列,因此不能通过索引来进行操作
1:使用set()创建集合
set(object) # 参数为一个序列,整型不能作为参数
set_a = set("abcb")
print(set_a) # {'b', 'a', 'c'}
2:使用{}直接定义
set_a = {'a', 'b', 'c'}
print(type(set_a), set_a) # <class 'set'> {'b', 'c', 'a'}
注意:创建一个空集合必须使用set(),而不是{},因为{}是用来创建一个空字典的
set_a = set()
print(type(set_a), set_a) # <class 'set'> set()b = {}
print(type(b), b) # <class 'dict'> {}
二、集合的使用
1:添加元素add():重复添加无效
set.add(x) # x为要添加的元素
返回值为:None,修改了原集合
set_a = set("abc")
print(set_a) # {'c', 'a', 'b'}
# 元素不存在
set_a.add("d")
print(set_a) # {'c', 'a', 'b', 'd'}
# 元素已存在
set_a.add('c')
print(set_a) # {'c', 'a', 'b', 'd'}
2:添加多个元素update():把传入的元素拆分,作为个体加入到集合中
set.update()
返回值为:None,修改了原集合
set_a = set("abc")
print(set_a) # {'c', 'b', 'a'}
result = set_a.update("defdab")
print(result) # None
print(set_a) # {'d', 'f', 'e', 'b', 'c', 'a'}
set_a = set("abc")
print(set_a) # {'a', 'b', 'c'}
result = set_a.update(['a','g','r',1,2])
print(result) # None
print(set_a) # {1, 2, 'a', 'r', 'g', 'c', 'b'}
3:删除元素remove()
set.remove(x) # x为要删除的元素
返回值为:None,删除的元素不存在,会报错,修改了元集合
set_a = set("abc")
print(set_a) # {'b', 'c', 'a'}
result = set_a.remove('a')
print(result) # None
print(set_a) # {'b', 'c'}
result = set_a.remove('d') # 报错,KeyError: 'd'
4:删除元素discard()
set.discard(x) # x为要删除的元素
返回值为:None,删除的元素不存在,不会报错,修改了元集合
set_a = set("abc")
print(set_a) # {'c', 'b', 'a'}
# 删除的元素存在
result = set_a.discard('a')
print(result) # None
print(set_a) # {'c', 'b'}
# 删除的元素不存在
result = set_a.discard('d')
print(result) # None
print(set_a) # {'c', 'b'}
5:删除元素pop():随机删除一个元素
set.pop()
返回值为:被删除的元素,修改了元集合
set_a = set("abc")
print(set_a) # {'c', 'a', 'b'}
result = set_a.pop()
print(result) # c
print(set_a) # {'a', 'b'}
6:统计集合的元素个数len()
len(set)
返回值为:集合的元素个数
set_a = {'a', 'b', 'c'}
result = len(set_a)
print(result) # 3
7:清空集合clear()
set.clear()
返回值为:None,修改了原集合
set_a = {'a', 'b', 'c'}
result = set_a.clear()
print(result) # None
print(set_a) # set()
8:判断元素是否在集合中,使用成员运算符(in / not in)
set_a = {'a', 'b', 'c'}
print('a' in set_a) # True
print('a' not in set_a) # False
9:isdisjoint():判断两个集合是否包含相同的元素
set.isdisjoint(set1) # set1必填
返回值为:返回布尔值,包含相同的元素返回False,不包含相同的元素,返回True
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f'}
# set_a与set_b中是否有相同的元素
result = set_a.isdisjoint(set_b)
print(result) # False
10:issubset() :判断集合中的所有元素是否都包含在指定的集合中
set.issubset(set1) # set中的所有元素是否都包含在set1中
# set1:必填
返回值为:布尔值,如果都包含返回True,否则返回False
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f', 'b', 'g', 'c'}
# set_a中的所有元素是否都包含在set_b中
result = set_a.issubset(set_b)
print(result) # True
11:issuperset() :判断指定集合的所有元素是否都包含在原始的集合中
set.issuperset(set1) # set1中的所有元素是否都包含在set中
# set1:必填
返回值为:布尔值,如果都包含返回True,否则返回False
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f', 'b', 'g', 'c'}
# set_b中的所有元素是否都包含在set_a中
result = set_a.issuperset(set_b)
print(result) # False
三、集合的操作符
1:求差集,集合元素包含在第一个集合中,但不包含在第二个集合
1.1:使用“-”操作符
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f'}
# set_a中有的元素,在set_b中没有
result = set_a - set_b
print(result) # {'c', 'b'}
1.2:使用difference()方法
set1.difference(set2) # set1中有的元素,set2中没有
返回值为:一个新的集合,不修改原集合
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f'}
# set_a中有的元素,在set_b中没有
result = set_a.difference(set_b)
print(result) # {'c', 'b'}
1.3:使用difference_update()方法
set1.difference_update()(set2) # set1中有的元素,set2中没有
返回值为:一个新的集合,修改了原集合set1
difference_update() 方法与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f'}
# set_a中有的元素,在set_b中没有
result = set_a.difference_update(set_b)
print(result) # None
print(set_a) # {'c', 'b'}
2:求交集,集合元素包含在第一个集合中,同时包含在第二个集合
2.1:使用“&”操作符
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f'}
# # set_a中有的元素,在set_b中也有
result = set_a & set_b
print(result) # {'a'}
2.2:使用intersection() 方法
set.intersection(set1, set2...)
# set中有的元素,在set1,set2中也有
# set1:必填
# set2:选填
返回值为:一个新的集合,不修改原集合
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f'}
# set_a中有的元素,在set_b中也有
result = set_a.intersection(set_b)
print(result) # {'a'}
2.3:使用intersection_update() 方法
set.intersection_update(set1, set2 ... )
# set中有的元素,在set1,set2中也有
# set1:必填
# set2:选填
返回值为:None,修改了原集合set
intersection_update() 方法不同于 intersection() 方法,因为 intersection() 方法是返回一个新的集合,而 intersection_update() 方法是在原始的集合上移除不重叠的元素。
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f'}
# set_a中有的元素,在set_b中也有
result = set_a.intersection_update(set_b)
print(result) # None
print(set_a) # {'a'}
3:求并集(合集),所有集合中的所有元素
3.1:使用“|”操作符
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f'}
# set_a、set_b中所有的元素
result = set_a | set_b
print(result) # {'c', 'd', 'b', 'f', 'a'}
3.2:使用union() 方法
set.union(set1,set2...)
# set,set1,set2等集合中的所有元素
# set1:必填
# set2:选填
返回值为:所有元素组成的一个新的集合,不修改原集合set
set_a = {'a', 'b', 'c'}
set_b = {'a', 'd', 'f'}
# set_a、set_b中所有的元素
result = set_a.union(set_b)
print(result) # {'b', 'd', 'f', 'a', 'c'}