介绍
本文将详细介绍 Python 中集合(Collection)类型的使用,包括列表(List)、元组(Tuple)、集合(Set)、字典(Dictionary)这四种基本数据结构的定义、访问、添加、删除和修改操作。通过学习这些内容,读者将能够熟练掌握 Python 集合类型的基本操作,为后续的编程学习打下坚实基础。
案例:网球赛事管理系统
代码
print('-'*34,'下面是定义集合并获取集合元素','-'*40)
s = 'ATP是男子网球协会,WTA是女子网球协会' #字符串 #str()函数用来将其他类型转成字符串
print(s[0],s[1],s[2],sep='') #0是字符串的索引 sep参数用来定义分隔符,这里是空
print(s[11],s[12],s[13],sep='') #11是字符串的索引 sep参数用来定义分隔符,这里是空
GS = ['澳门','法网','温网','美国'] #列表 #list()函数用来将其他集合类型转成列表
print('网球大满贯赛事包括:',end='') #end参数用来定义换行时采用的符号
print(GS[0],GS[1],GS[2],GS[3],sep=',') #0是字符串的索引 sep参数用来定义分隔符,这里是,
ATP1000 = ('马德里','罗马','上海','巴黎') #元组 元素不能修改 #tuple()函数用来将其他集合类型转成元组
print('ATP大师赛举办地包括:',end='') #end参数用来定义换行时采用的符号
print(ATP1000[0],ATP1000[1],ATP1000[2],ATP1000[3],sep=',') #0是字符串的索引 sep参数用来定义分隔符,这里是,
WTA1000 = {'多哈','迪拜','北京','武汉'} #集合 无序随机,没有下标,元素不能重复 #set()函数用来将其他集合类型转成集合
print('WTA1000赛举办地包括:',end='') #end参数用来定义换行时采用的符号
print(list(WTA1000)[0],list(WTA1000)[1],list(WTA1000)[2],list(WTA1000)[3],sep=',') #list()函数用来将其他集合类型转成列表
WTA = {'WTA250':['广州','九江','广岛'],'WTA500':['宁波','东京'],'WTA_FINAL':'利雅得'} #字典 dist()函数用来将其他类型转成字典
print('WTA巡回赛举办地包括:',end='') #end参数用来定义换行时采用的符号
print(','.join(WTA['WTA250']),end=',') #字典不能用数字索引
print(','.join(WTA['WTA500']),end=',')
print(WTA['WTA_FINAL'])
print('-'*40,'下面是集合增加元素','-'*40)
print('大满贯赛事添加中网之前包括:',end='')
print(','.join(GS))
GS.append('中网') #列表添加元素
print('大满贯赛事添加中网之后包括:',end='')
print(','.join(GS))
print('ATP大师赛添加蒙特卡洛之前包括:',end='')
print(','.join(ATP1000))
ATP_MASTER = ATP1000+('蒙特卡洛',) #元组如果只有一个元素,元素后面必须加上逗号
print('ATP大师赛添加蒙特卡洛之后包括:',end='')
print(','.join(ATP_MASTER)) #join函数是将ATP_MASTER的元素用,逗号连接起来 map函数是将ATP_MASTER里的每个元素转成字符串str
print('WTA1000赛添加辛辛那提之前包括:',end='')
print(','.join(WTA1000))
WTA1000.add('辛辛那提') #集合添加元素用add()方法
print('WTA1000赛添加辛辛那提之后包括:',end='')
print(','.join(WTA1000))
print('不包含大满贯和WTA1000赛的WTA巡回赛举办地包括:',end='') #end参数用来定义换行时采用的符号
print(','.join(WTA['WTA250']),end=',') #字典不能用数字索引
print(','.join(WTA['WTA500']),end=',')
print(WTA['WTA_FINAL'])
WTA['大满贯'] = GS #字典添加元素,等号两边直接写键名和值名,键名之前加上字典名,键名用中括号括起来
WTA['WTA1000'] = WTA1000 #字典添加元素,等号两边直接写键名和值名,键名之前加上字典名,键名用中括号括起来
print('包含大满贯和WTA1000赛的WTA巡回赛举办地包括:',end='') #end参数用来定义换行时采用的符号
print(','.join(WTA['WTA250']),end=',') #字典不能用数字索引
print(','.join(WTA['WTA500']),end=',')
print(','.join(WTA['WTA1000']),end=',')
print(','.join(WTA['大满贯']),end=',')
print(WTA['WTA_FINAL'])
#WTA字典的键WTA250添加香港,键WTA500添加首尔
#向 WTA250 列表添加'香港'
WTA['WTA250'].append('香港')
#向 WTA250 列表添加'首尔'
WTA['WTA500'].append('首尔')
#打印更新后的 WTA 字典
print('WTA250添加香港,WTA500添加首尔的WTA巡回赛举办地包括:',end='') #end参数用来定义换行时采用的符号
print(','.join(WTA['WTA250']),end=',') #字典不能用数字索引
print(','.join(WTA['WTA500']),end=',')
print(','.join(WTA['WTA1000']),end=',')
print(','.join(WTA['大满贯']),end=',')
print(WTA['WTA_FINAL'])
print('-'*40,'下面是集合增加元素','-'*40)
print('大满贯赛事删除中网之前包括:',end='')
print(','.join(GS))
# 从GS集合中移除'中网'元素
GS.remove('中网')
print('大满贯赛事删除中网之后包括:',end='')
print(','.join(GS))
print('ATP大师赛删除蒙特卡洛之前包括:',end='')
print(','.join(ATP_MASTER))
# 重新定义 ATP_MASTER 排除 '蒙特卡洛'
ATP_MASTER = tuple(item for item in ATP_MASTER if item != '蒙特卡洛')
print('ATP大师赛删除蒙特卡洛之后包括:',end='')
print(','.join(ATP_MASTER))
print('WTA1000赛删除辛辛那提之前包括:',end='')
print(','.join(WTA1000))
# 从 WTA1000赛事 集合中移除 '辛辛那提'赛事
WTA1000.remove('辛辛那提')
print('WTA1000赛删除辛辛那提之后包括:',end='')
print(','.join(WTA1000))
print('包含总决赛的WTA巡回赛举办地包括:',end='')
# 打印 WTA250 赛事的列表,使用逗号分隔每个赛事的名称,不换行
print(','.join(WTA['WTA250']),end=',')
# 打印 WTA500 赛事的列表,使用逗号分隔每个赛事的名称,不换行
print(','.join(WTA['WTA500']),end=',')
print(','.join(WTA['WTA1000']),end=',')
# 打印 WTA1000 赛事的列表,使用逗号分隔每个赛事的名称,不换行
print(','.join(WTA['大满贯']),end=',')
print(WTA['WTA_FINAL'])
#字典删除键值对,用pop()方法,删除总决赛WTA_FINAL
WTA.pop('WTA_FINAL')
print('不包含总决赛的WTA巡回赛举办地包括:',end='')
#打印WTA250赛事的列表,使用逗号分隔每个项目,并在末尾添加逗号
print(','.join(WTA['WTA250']),end=',')
#打印WTA500赛事的列表,使用逗号分隔每个项目,并在末尾添加逗号
print(','.join(WTA['WTA500']),end=',')
#打印WTA1000赛事的列表,使用逗号分隔每个项目,并在末尾添加逗号
print(','.join(WTA['WTA1000']),end=',')
#打印大满贯赛事的列表,使用逗号分隔每个项目,并在末尾添加逗号
print(','.join(WTA['大满贯']),end=',')
ATP1000_2=ATP1000[:1]+('蒙特利尔',)+ATP1000[2:]
print('ATP大师赛修改罗马成蒙特利尔之后包括:',end='')
print(','.join(ATP1000_2))
print('WTA1000赛修改多哈成迈阿密之前包括:',end='')
print(','.join(WTA1000))
#集合推导式:[expression表达式for item in iterable可迭代对象比如集合}是一种简洁的方式来创建集合。这里的表达式是
#('边阿密'if item =='多哈'else item),它会遍历WTAI000 集合中的每一个元素item,
#条件表达式:('迈阿密'if item =='多哈' else item)是一个条件表达式(也称为三元运算符),它的作用是:
#如果item等于'多哈',则返回'迈阿密';
#否则,返回原来的item。
#WTA1000 ={('边河'if item='多哈' else item) for itew in WTA1000}
#初始状态:假设WTA1000的初始值为{'多哈','迪拜,'北京,'武汉}。
#集操作:WTAI000-{'多哈'} 将移除 '多哈',结果为'迪拜','北京','武汉'},
#并集操作:{'迪拜',北京','武汉']|{’迈阿密'}将'迈阿密'添加到结果集中,最终得到{‘迪拜','北京','武汉','迈阿密'}
WTA1000=WTA1000-{'多哈'}|{'迈阿密'}
print('WTA1000赛修改多哈成迈阿密之后包括:',end='')
print(','.join(WTA1000))
print('WTA字典中WTA250赛事的广州改成杭州之前的WTA巡回赛举办地包括:',end='')
print(','.join(WTA['WTA250']),end=',')
print(','.join(WTA['WTA500']),end=',')
print(','.join(WTA['WTA1000']),end=',')
print(','.join(WTA['大满贯']))
#将WTA字典中WTA250赛事的广州改为杭州
WTA['WTA250'][0] = '杭州'
print('WTA字典中WTA250赛事的广州改成杭州之后的WTA巡回赛举办地包括:',end='')
print(','.join(WTA['WTA250']),end=',')
print(','.join(WTA['WTA500']),end=',')
print(','.join(WTA['WTA1000']),end=',')
print(','.join(WTA['大满贯']))
代码结果
代码分析
-
集合类型定义与访问:
- 字符串:使用索引访问单个字符,
s[0]获取'A' - 列表:有序可变集合,使用数字索引访问,
GS[0]获取'澳门' - 元组:有序不可变集合,访问方式与列表相同但不可修改
- 集合:无序不重复集合,需要转换为列表后才能索引访问
- 字典:键值对映射,使用键名访问值,如
WTA['WTA250']
- 字符串:使用索引访问单个字符,
-
元素添加操作:
- 列表:使用
append()方法在末尾添加元素 - 元组:不可直接修改,需要通过创建新元组实现"添加"
- 集合:使用
add()方法添加元素 - 字典:通过赋值语句添加键值对
- 列表:使用
-
元素删除操作:
- 列表:使用
remove()方法删除指定元素 - 元组:通过创建新元组排除指定元素实现"删除"
- 集合:使用
remove()或discard()方法删除元素 - 字典:使用
pop()方法删除指定键值对
- 列表:使用
-
元素修改操作:
- 元组:通过切片和拼接创建新元组
- 集合:通过集合运算实现元素替换
- 字典列表:直接通过索引修改列表中的元素