Python中的set集合
一、集合是什么?
集合是什么呢?相信读者朋友们哪怕是没有用过集合这个数据类型。也一定在数学课堂上听过集合这个名词。数学中的集合是一个基本概念,说白了一堆不重复的数字可以组成一个集合。回到Python中集合的数据类型,它可以用来存放多个不重复的数据,并且这些数据的数据类型是不可变类型。这些不可变类型包括数字,字符串,元组。也就是说可变的数据类型如列表,字典是不能作为集合的元素的。
Python中的集合分为两种,一种是set类型的集合,另一种是fronzenset类型的集合。这两种类型的集合的区别是:set集合可变,即可以添加,删除集合内部的元素,而fronzenset集合则不可变。即不能添加,删除集合内部的元素。
set集合的定义是{element1,element2,...,elementn
}, 其中,element1~elementn表示集合中的元素,个数没有限制。每个元素都是唯一的。
二、set集合怎么用?
1、创建set集合
创建set集合的方式有两种:
第一种:通过{}
方式创建,其语法格式是:{element1,element2,...,elementn}
第二种:通过set
函数, 其语法格式是:set(iterable
) 其中iterable
不传的话,则会创建一个空的set对象。传入的iterable必须是可以遍历的序列,例如字符串,列表等。举个例子:
1
2
3
4
5
6
|
set_demo = { '1' , 2 , ( '码农' , '飞哥' )} print (set_demo) list = [ 1 , 'test' , 1 , ( '码农' , '飞哥' )] print ( '列表list结果=' , list ) set_demo1 = set ( list ) print ( '生成的set结果=' , set_demo1) |
运行结果是:
1
2
3
|
{ 2 , ( '码农' , '飞哥' ), '1' } 列表 list 结果 = [ 1 , 'test' , 1 , ( '码农' , '飞哥' )] 生成的 set 结果 = { 1 , ( '码农' , '飞哥' ), 'test' } |
可以看到列表list中哪怕有两个1元素,但是生成set集合之后还是只有一个1元素,也就是说在集合中值相同的元素只会存储一遍。
2、删除set集合
删除set集合可以通过del(setname)函数来删除,setname是要删除的set集合名称。
3、访问set集合元素
由于集合中的元素是无序的,因此五香向列表那样使用下标访问元素,Python中,访问集合元素最常用的方法是使用循环,将集合中的元素逐一读取出来。
1
2
3
|
set_demo = { '1' , 2 , ( '码农' , '飞哥' )} for value in set_demo: print (value) |
运行结果是:
1
2
3
4
5
|
2 ( '码农' , '飞哥' ) 1 |
元素的输出也是无序的。
4、删除集合中的元素
删除集合中的元素的方式有两种:
第一种:通过remove()方法,其语法结构是:setname.remove(element),其中,setname为待操作的set集合,element为需要删除的元素,如果删除失败的话则会报KeyError错误。
第二种:通过discard()方法,其使用跟remove()方法一致,只是如果删除元素失败的话不会报错。
1
2
3
4
5
|
set_demo = { '1' , 2 , ( '码农' , '飞哥' )} set_demo.remove( '1' ) print ( '删除元素1之后的集合=' , set_demo) set_demo.discard( '5' ) print ( '删除元素5之后的集合=' , set_demo) |
运行结果是:
1
2
|
删除元素 1 之后的集合 = { 2 , ( '码农' , '飞哥' )} 删除元素 5 之后的集合 = { 2 , ( '码农' , '飞哥' )} |
5、向集合中添加元素
通过add函数可以向集合中添加元素,其语法结构是:setname.add(element),其中setname是待操作的set集合,element是待添加的元素,只能添加不可变的元素,例如:数字,元组或者字符串,不能添加列表,字典,set集合这类可变的数据。
举个例子:
1
2
|
set_demo.add( '6' ) print ( '添加元素6之后的结果是=' , set_demo) |
运行结果是:
1
|
添加元素 6 之后的结果是 = { 2 , '6' , ( '码农' , '飞哥' )} |
三、set集合的交并补
在数学中集合是有交集并集和补集的。Python中的集合也是有这些概念的。
1、交集
通过&
连接两个set集合就能生成一个新的集合,新集合取两个原集合的公共元素。
2、并集
通过|
连接两个set集合就能生成一个新的集合,新集合取两个原集合的全部元素。
3、差集
通过-
连接两个set集合就能生成一个新的集合,新集合取一个集合中有而另一个集合中没有的元素。
举个栗子:
1
2
3
4
5
|
set_demo = { 1 , 3 , 5 , 6 } set_demo1 = { 2 , 4 , 6 } print ( "取交集的结果=" , set_demo & set_demo1) print ( "取并集的结果=" , set_demo | set_demo1) print ( "取差集的结果=" , set_demo - set_demo1) |
运行结果是
1
2
3
|
取交集的结果 = { 6 } 取并集的结果 = { 1 , 2 , 3 , 4 , 5 , 6 } 取差集的结果 = { 1 , 3 , 5 } |
四、set中的其他方法
通过dir(set)可以查看set集合中的所有方法。一共有如下方法:
1
|
[ '__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' ] |
方法的命名比较规范,按照英文名都能猜测出方法的作用,在此就不在赘述每个方法的含义了。直接举例说明下:
1
2
3
4
5
6
7
8
|
set_demo = { 1 , 3 , 5 , 6 } set_demo1 = { 2 , 4 , 6 } set_demo.update({ 12 , ( 2 , 3 )}) print ( 'set_demo调用update方法之后' , set_demo) set_demo = { 1 , 3 , 5 , 6 } print ( 'set_demo调用union方法之后' , set_demo.union(set_demo1)) print ( 'set_demo调用difference方法之后' , set_demo.difference(set_demo1)) print ( 'set_demo调用__sub__方法之后' , set_demo.__sub__(set_demo1)) |
运行结果是:
1
2
3
4
|
set_demo调用update方法之后 { 1 , 3 , ( 2 , 3 ), 5 , 6 , 12 } set_demo调用union方法之后 { 1 , 2 , 3 , 4 , 5 , 6 } set_demo调用difference方法之后 { 1 , 3 , 5 } set_demo调用__sub__方法之后 { 1 , 3 , 5 } |
五、frozenset 集合
frozenset集合是set集合的不可变版本,与set集合相比,frozenset集合中的元素不可变,也就是没有添加元素,删除元素的方法。
创建一个frozenset集合的方式是通过frozenset()方法。 其语法格式是:frozenset(iterable) 其中iterable不传的话,则会创建一个空的set对象。传入的iterable必须是可以遍历的序列,例如字符串,列表等。
1
2
3
|
frozenset_demo = frozenset ( list ) print ( "frozenset_demo的类型是=" , type (frozenset_demo)) print ( "frozenset_demo的结果=" , frozenset_demo) |
运行结果是:
1
2
|
frozenset_demo的类型是 = < class 'frozenset' > frozenset_demo的结果 = frozenset ({( '码农' , '飞哥' ), 1 , 'test' }) |
以上就是详细介绍Python中的set集合的详细内容,更多关于Python中的set集合的资料请关注服务器之家其它相关文章!希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/u014534808/article/details/118439186