欢迎光临
我们一起进阶

Python编程——集合的定义和操作

扫码或搜索:沉默王二
发送 290992
即可立即永久解锁本站全部文章

集合是Python的基本数据类型,在下面这篇文章中,我将简单介绍一下集合的定义和常见的操作。

1.集合的定义

集合是无序的-> 不支持下标索引
集合是可变的数据类型
集合中的元素是唯一的
集合一般用于元组或者列表中的元素去重

格式:集合名 = {元素1,元素2,…}
如下实例:my_set = {1, 2, 3, 3, 3, 2}实际等价于 my_set = {1, 2, 3}

my_set = {1, 2, 3, 3, 3, 2}
print(my_set)


结果如下:
{1, 2, 3}

定义一个空的集合  my_set = set()
注意: my_set = {}  这样的写法为一个空字典

my_set = {}
print(type(my_set))
my_set=set()
print(type(my_set))


结果如下:
<class 'dict'>
<class 'set'>

2. 集合的常见操作

我们可以借助dir,列举出集合的常见操作函数,并对常见的操作做出具体的解释。

my_set1={"name","age",12,3.14,True,666}
print(dir(my_set1))


结果如下:
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update'

2.1 向集合中添加元素(add, update):

add函数是将添加的元素作为一个元素处理
update是将添加的元素拆分,做为个体传入到集合中

my_set = set()
#add函数是将添加的元素作为一个元素处理
my_set.add("abcd123")
print(my_set)

my_set = set()
#update是将添加的元素拆分,做为个体传入到集合中
my_set.update("abcd123")
print(my_set)


结果如下:
{'abcd123'}
{'b', 'c', '1', '3', 'd', '2', 'a'}

2.2 删除集合中的元素(remove,pop,discard,clear):

remove ():删除集合中的具体的值,如果集合中没有这个值,则会报错

my_set={"name","age",12,3.14,True}
#删除集合中的具体的值
my_set.remove(12)
print(my_set)
#如果集合中没有这个值,则会报错
my_set.remove(111)
print(my_set)


结果如下:
{True, 3.14, 'age', 'name'}
Traceback (most recent call last):
  File "D:/python_code/St11/test/liebiao.py", line 6, in <module>
    my_set.remove(111)
KeyError: 111

pop() : 随机删除集合中的某个元素, 如果集合为空,则程序报错

my_set={"name","age",12,3.14,True,111}
#随机删除集合中的某个元素
my_set.pop()
print(my_set)

my_set1=set()
#如果集合为空,则会报错
my_set1.pop()
print(my_set1)


结果如下:
{3.14, 'name', 12, 111, 'age'}
Traceback (most recent call last):
  File "D:/python_code/St11/test/liebiao.py", line 7, in <module>
    my_set1.pop()
KeyError: 'pop from an empty set'

discard (): 如果元素存在,直接删除。 如果元素不存在,程序不会报错,不做任何操作

my_set={"name","age",12,3.14,True}
#删除集合中的具体的值
my_set.discard(12)
print(my_set)

my_set={"name","age",12,3.14,True}
#如果集合中没有这个值,则不做任何操作
my_set.discard(111)
print(my_set)


结果如下:
{True, 3.14, 'age', 'name'}
{True, 3.14, 'age', 12, 'name'}

clear (): 清空集合,清空之后集合为空

3. 集合的其他操作

& <--> intersection,| <--> union,’-‘ <--> difference, ^ <--> symmetric_difference
集合的交集(&)

my_set1={"name","age",12,3.14,True,666}
my_set2={"name","age",12,3.14,True,111,222}

#集合的交集
my_set=my_set1&my_set2
print(my_set)
my_set=my_set1.intersection(my_set2)
print(my_set)

结果如下:
{True, 3.14, 'name', 12, 'age'}
{True, 3.14, 'name', 12, 'age'}

集合的并集(|)

my_set1={"name","age",12,3.14,True,666}
my_set2={"name","age",12,3.14,True,111,222}
#集合的并集
my_set=my_set1|my_set2
print(my_set)
my_set=my_set1.union(my_set2)
print(my_set)

结果如下:
{True, 3.14, 'name', 12, 111, 666, 'age', 222}
{True, 3.14, 'name', 12, 111, 666, 'age', 222}

集合的差集(-):在”—”前的集合,而不在”—”后的集合

my_set1={"name","age",12,3.14,True,666}
my_set2={"name","age",12,3.14,True,111,222}
#集合的差集,在第一个集合中,不在第二个集合中
my_set=my_set1-my_set2
print(my_set)
my_set=my_set1.difference(my_set2)
print(my_set)
#集合的差集,在第二个集合中,不在第一个集合中
my_set=my_set2-my_set1
print(my_set)
my_set=my_set2.difference(my_set1)
print(my_set)


结果如下:
{666}
{666}
{222, 111}
{222, 111}

集合的对称差集(^):非两者公有的部分

my_set1={"name","age",12,3.14,True,666}
my_set2={"name","age",12,3.14,True,111,222}
#集合的对称差集,不是两个集合公有的部分
my_set=my_set1^my_set2
print(my_set)
my_set=my_set1.symmetric_difference(my_set2)
print(my_set)

结果如下:
{666, 222, 111}

issubset(子集),issupperset(超集):例如:如果 b 是 a 的子集,那么 a就是b 的超集。

my_set1={"name","age",12,3.14,True}
my_set2={"name","age",12,3.14,True,111,222}
#my_set1是my_set2的子集
print(my_set1.issubset(my_set2))
#my_set1是my_set2的超集
print(my_set1.issuperset(my_set2))


结果如下:
True
False
赞(0) 打赏
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

小白学堂,学的不止是技术,更是前程

关于我们免责声明

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏