Python 集合

一、集合概念

        集合(set)是一个无序的不重复元素序列。

二、集合的创建

        可以使用大括号{}或者set方法创建集合,但是创建一个空集合必须使用set而不能使用空{},因为在python中空{}用于创建空字典。

1、set函数

        set()函数创建一个无序不重复元素集,返回值为新的集合对象。示例如下:

list_1 = ['h','l','e','l','o']
set_1 = set(list_1)
print(set_1) #输出为{'o', 'h', 'e', 'l'}

三、 集合运算规则

1、交集

        set_1 & set_2:返回一个新的集合对象,包括同时在集合set_1和set_2中的共同元素,示例如下:

list_1 = ['h','l','e','l','o']
list_2 = ['w','o','r','l','d']
set_1 = set(list_1)
set_2 = set(list_2)
print(set_1 & set_2) #输出为{'o', 'l'}

        交集方法为set.intersection,示例如下:

set1 = {1,2,3,4,5}
set2 = {2,3,4,6,7,8}
print(set1.intersection(set2))#输出为{2, 3, 4},在set1中存在又在set2中存在的元素

2、 并集

        set_1 | set_2:返回一个新的集合对象,包括集合set_1和set_2中的所有元素,示例如下:

list_1 = ['h','l','e','l','o']
list_2 = ['w','o','r','l','d']
set_1 = set(list_1)
set_2 = set(list_2)
print(set_1 | set_2) #输出为{'l', 'w', 'o', 'e', 'r', 'h', 'd'}

        并集方法为set.union,示例如下:

set1 = {1,2,3,4,5}
set2 = {2,3,4,6,7,8}
print(set1.union(set2))#输出为{1, 2, 3, 4, 5, 6, 7, 8}

3、 差集

        set_1 - set_2:返回一个新的集合对象,包括在集合set_1中但不在set_2中的元素,示例如下:

list_1 = ['h','l','e','l','o']
list_2 = ['w','o','r','l','d']
set_1 = set(list_1)
set_2 = set(list_2)
print(set_1 - set_2) #输出为{'h', 'e'}

        差集方法为set.difference,示例如下:

set1 = {1,2,3,4,5}
set2 = {2,3,4,6,7,8}
print(set1.difference(set2))#输出为{1, 5}  set1去除set2中存在的元素

4、 补集

        set_1^set_2:返回一个新的集合对象,包括集合set_1和set_2的非共同元素,即异或运算,示例如下:

list_1 = ['h','l','e','l','o']
list_2 = ['w','o','r','l','d']
set_3 = {'l'}
set_1 = set(list_1)
set_2 = set(list_2)

print(set_1 ^ set_2) #输出为{'w', 'e', 'r', 'h', 'd'}
print(set_1 ^ set_2 ^ set_3) #输出为{'e', 'l', 'd', 'w', 'r', 'h'} ,注意异或运算,三者异或时,三个共有的元素也为真

        补集方法为 set.symmetric_difference,示例如下:

set1 = {1,2,3,4,5}
set2 = {2,3,4,6,7,8}
print(set1.symmetric_difference(set2))#输出为{1, 5, 6, 7, 8},set1与set2的异或运算

5、 集合的比较 

(1) 集合的比较方法

set.issubset:判断一个集合是不是另一个集合的子集,是则返回True,否则返回False.

set.superset:判断一个集合是不是另一个集合的超集,是则返回True,否则返回False

示例如下:

set_1 = {1,2,3,4,5}
set_2 = {1,2,3}

print(set_1.issuperset(set_2))#输出为True   set_1是set_2的超集
print(set_2.issubset(set_1))#输出为False  set_2是set_1的子集
(2)集合的比较操作符

<:真正意义上的子集,在集合A是集合B的子集的同时A不等于B

<=:子集或相等,集合A是集合B的子集或相等

==:相等,集合A和集合B中的元素相等,但是两个集合并不必须相等()

>=:超集或相等,集合A是集合B的超集或相等

>:超集,集合A是集合B的超集

示例如下:

set_1 = {1,2,3,4,5}
set_2 = {1,2,3}
set_3 = {1,2,3,3}

print(set_1 > set_2)  #输出为True,set_1是set_2的超集
print(set_1 >= set_1) #输出为True
print(set_2 == set_3) #输出为True
print(set_2 <= set_2) #输出为True
print(set_2 < set_1)  #输出为True,set_2是set_1的子集

四、集合的基本方法

1、元素添加

   (1)set.add方法

        向集合添加元素,但只能添加可哈希数据类型,即不可变数据类型:数值、元组、字符串。示例如下:

set_1 = {'h'}
set_1.add('e')
print(set_1) #输出为{'e', 'h'}

注意:add方法单次只能添加一个元素,否则会报错TypeError: add() takes exactly one argument (2 given

  (2)set.update

        向集合添加元素,但只能添加可迭代的数据类型,即字符串、元组、列表、字典。update方法会将元素进行拆分再添加,当参数为字典时,会将字典中的健作为集合元素添加进集合,忽略值。示例如下:

set_1 = {'h'}

set_1.update((1,2),(2,3),{8:1,9:3},('l','8'))
print(set_1) #输出为{'l', 1, 2, 3, 'h', '8', 8, 9}

 补充add方法与update方法的区别:

(1)参数不同:add方法只可以添加不可变数据类型,如数字、元组、字符串,否则会报错TypeError: unhashable type: 'set',并且一次智能添加一个元素;而update方法只能添加可迭代元素,如字符串、列表、元组、字典,若添加数字会报错object is not iterable,一次可以添加多个元素。

(2)返回结果不同:add方法会把元素整体性的添加进去,即元素为元组时,加入到集合中也作为元组存在;update方法会把元素查分再添加进去,当参数为字典时,会将字典中的健作为集合元素添加进集合,忽略值。

2、元素删除

 (1)set.remove

        从集合中移除元素,如果元素在集合中不存在,则会引发KeyError.示例如下:

set_1 = {'h','e'}
set_1.remove('h')
print(set_1)#输出为{'e'}
set_1.remove('x')#输出为KeyError: 'x'
(2)set.discard方法

         从集合中移除元素。如果元素不存在,不报错,该方法无返回值。示例如下:

set_1 = {'h','e'}

set_1.discard('h')

print(set_1)#输出为{'e'}
 (3)set.pop方法

         从集合中随机移除并返回该元素,如果集合为空则会引发KeyError。Pop方法会对集合进行无序的排列,然后将这个无需排列集合的左边第一个元素进行删除。示例如下:

set_1 = {'h','e','l','2'}

set_1.pop()
print(set_1)#输出为{'l', '2', 'h'}

set_1.pop()
print(set_1)#输出为{'2', 'h'}

set_1.pop()
print(set_1)#输出为{'h'}

set_1.pop()
print(set_1)#输出为set()

set_1.pop()
print(set_1)#输出为KeyError: 'pop from an empty set'

(4)set.clear方法

        移除集合中所有元素。示例如下:

set_1 = {'h','e','l','2'}

set_1.clear();
print(set_1)#输出为set()

3、 Set.isdisjoint方法

用于判断两个集合是否包含相同的元素,如果没有则返回True,否则返回False。示例如下:

set_1 = {1,2,3}
set_2 = {2,3,4}
set_3 = {4,5,6}

print(set_1.isdisjoint(set_2))#输出为False
print(set_1.isdisjoint(set_3))#输出为True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值