博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十一讲:集合
阅读量:6578 次
发布时间:2019-06-24

本文共 3877 字,大约阅读时间需要 12 分钟。

集合

概念:

set集合是python中一种基本数据类型,分为可变集合和不可变集合两种。集合是无序不重复元素集,包括创建集合set,向集合中添加元素,删除集合中的元素,求集合的交集,并集,差集等操作。

可变集合:需要的参数必须是迭代器类型,如序列,字典,然后转换成无序不重复的元素集。由于集合是不重复的,所以可以对字符串,列表,元素进行去重操作。

不可变集合:集合中的元素不可以被改变,不能做插入和删除操作,其他方法和可变集合基本相同。

 

1、创建集合:

创建空集合:

s=set()ss=set([])st=set(())

创建非空集合:参数必须是序列(字符串,列表,元素),字典,不能是数值类型

#字符串做参数s1=set('hellopython')print (s1)#列表做参数s2=set([1,2,3,4])print (s2)#元素做参数s3=set((1,2,3,4))print (s3)#字典做参数s4=set({
'name':'cwx','age':18})print(s4) #set集合做参数s5=set(s3)print (s3)

注意:字典转set集合,只取字典的key,相当于将字典中的dict.keys()列表转化成set集合。

 

2、添加集合元素(add,update)

add():将要添加的元素作为一个整体添加到集合中。
update():把要传入的元素拆分成单个字符,存于集合中,并去掉重复的
#add添加元素,作为一个整体添加到集合中sTest=set('one')sTest.add('Two')print ('add添加后的元素',sTest)#update添加元素,拆分单个字符,去掉重复字符sTest1=set('one')sTest1.update('Two')print ('update添加后的元素',sTest1) 运行结果: add添加后的元素 {'Two', 'e', 'o', 'n'} update添加后的元素 {'e', 'w', 'T', 'o', 'n'}

 

3、删除集合的元素(remove、discard、pop)

remove:确保元素存在,不存在则抛出KeyError异常

sTest=set('helloy')sTest.remove('y')print ('删除后的集合是:',sTest)
sTest.remove('a') print ('删除后的集合是:',sTest) 运行结果: 删除后的集合是: {'e', 'l', 'h', 'o'} Traceback (most recent call last):   File "E:/workplace/2019pratice/practice1.py", line 456, in 
    sTest.remove('a') KeyError: 'a'

 

discard:如果元素存在则删除,如果不存在则什么也没做,该函数没有返回值

sTest=set('helloy')sTest.discard('y')print ('discard删除元素后的集合',sTest)   #元素存在则删除sTest.discard('a')print ('discard删除元素后的集合',sTest)   #元素不存在什么也没做

 

pop:随机删除集合中的某个元素,如集合为空则抛出KeyError异常

sTest=set('helloy')sTest.pop()print ('pop删除元素后的集合',sTest)   #随机删除集合中的元素sTest1=set()sTest1.pop()print ('pop删除元素后的集合',sTest)   #集合为空则抛出KeyError异常 运行结果: pop删除元素后的集合 {'l', 'h', 'y', 'o'}   File "E:/workplace/2019pratice/practice1.py", line 464, in 
    sTest1.pop() KeyError: 'pop from an empty set'

 

 clear:清空集合元素

sTest=set('helloy')sTest.clear()print ('清空后的集合是',sTest) 运行结果: 清空后的集合是 set()

 

 

5、遍历集合

#for遍历集合元素 sTest = set(['e', 'two', 'o', 'n', '1', '3', '2'])for i in sTest:    print (i) 运行结果: 2 n 3 1 e o two

 

# 带索引序号的遍历:sTest = set(['e', 'two', 'o', 'n', '1', '3', '2'])for index,elem in enumerate(sTest):    print ('元素的索引是',index,'对应的元素是',elem) 运行结果: 元素的索引是 0 对应的元素是 e 元素的索引是 1 对应的元素是 o 元素的索引是 2 对应的元素是 3 元素的索引是 3 对应的元素是 1 元素的索引是 4 对应的元素是 n 元素的索引是 5 对应的元素是 two 元素的索引是 6 对应的元素是 2

 

6、集合与序列(字符串,列表,元素)间的转换:(序列转集合,重复会被去掉)

集合与字符串的转换:

testStr = 'python is good'# 字符串转集合st=set(testStr)print ('字符串转集合后:',st)# 集合转字符串,str()s=str(st)print ('集合转字符串后:',s)# 集合转字符串,join()s1=''.join(st)print (s1)运行结果:字符串转集合后: {
'o', 'p', 'y', 's', 't', 'd', 'h', 'i', 'n', ' ', 'g'}集合转字符串后: {
'o', 'p', 'y', 's', 't', 'd', 'h', 'i', 'n', ' ', 'g'}opystdhin g

 

集合与列表的转换:

listTest = [1, 2, 3, 2, 'a', 'b']# 列表转集合slist=set(listTest)print ('列表转集合:',slist)# 集合转列表list1=list(slist)print ('集合转列表:',list1) 运行结果: 列表转集合: {'a', 1, 2, 3, 'b'} 集合转列表: ['a', 1, 2, 3, 'b']

 

集合与元组的转换:

tupTest = (1, 2, 3, 2, 'a', 'b')# 元组转集合stupe=set(tupTest)print ('列表转集合:',stupe)# 集合转元组tupe1=tuple(stupe)print ('集合转元组:',tupe1)运行结果:列表转集合: {
1, 2, 3, 'a', 'b'}集合转元组: (1, 2, 3, 'a', 'b')

 

练习:结合set对象,列表某个list中所有元素出现的个数

listB=['a','b','c','a','b','a']for i in set(listB):    print (i,'出现%d次'%listB.count(i))运行结果:a 出现3次c 出现1次b 出现2次

 

7、集合间的操作:交集(&)、并集(|)、差集(-)

交集(&):两个集合共同元素组成的集合

s1=set([1,2,3])s2=set([1,3,4,5])print ('两个集合的交集是',s1&s2)     #交集运行结果:两个集合的交集是 {
1, 3}

 

并集(|):两个集合所有的,并去掉重复的元素组成的集合

s1=set([1,2,3])s2=set([1,3,4,5])print ('两个集合的并集是',s1|s2)     #并集运行结果:两个集合的并集是 {
1, 2, 3, 4, 5}

 

差集(-):在集合1但不在集合2中组成的集合

s1=set([1,2,3])s2=set([1,3,4,5])print ('两个集合的差集是',s1-s2)     #差集运行结果:两个集合的差集是 {
2}

 

8、集合间的运算: >、<、、>=、<=、!=、==(==:判断一个集合是否完全包含另一个集合)

s1=set([1,2,3])s2=set([1,2,3,4,5])print (s1>s2)print (s1

判断父亲集合函数:issuperset(),等同于>符号

判断是否是子集函数:issubset(),等同于<符号

s1=set([1,2,3])s2=set([1,3,4,5])s3=set([1,3])print (s2.issuperset(s3))print (s3.issubset(s2))print (s2.issuperset(s1))print (s1.issubset(s2))运行结果:TrueTrueFalseFalse

 

转载于:https://www.cnblogs.com/wenxiacui/p/11032349.html

你可能感兴趣的文章
发送json给服务器
查看>>
日历控件datetimepicker(IE11)
查看>>
RH253读书笔记(5)-Lab 5 Network File Sharing Services
查看>>
CCNP路由实验(4) -- BGP
查看>>
图像卷积与滤波的一些知识点
查看>>
关于 tchart 控件的相关内容
查看>>
(转)新的挑战:敏捷开发与优秀的程序员
查看>>
JS xpath
查看>>
关于 spring MVC 配置自动扫描中 use-default-filters 属性
查看>>
LIUNX 安装 nginx
查看>>
table头部固定,内容滚动
查看>>
插入DOM元素
查看>>
Android SDK Manager 更新
查看>>
第一次作业:Linux 2.6.32的进程模型与调度器分析
查看>>
C# Excel嵌入到Winform
查看>>
修改HTML5 input placeholder 颜色及修改失效的解决办法
查看>>
Windows 服务器部署 asp.net core
查看>>
html5 随机数函数
查看>>
数据结构之图(2-1)【十字链表】适用于有向图
查看>>
你必须知道的简单的位操作技巧
查看>>