版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十讲组合数据类型知识目标掌握Python四种组合数据类型(列表、元组、字典、集合)的定义、特点和基本操作。能力目标运用组合数据类型解决医学数据处理问题,如电子病历解析、数据去重与统计分析。素质目标培养数据结构化思维与逻辑推理能力,为数据分析和人工智能学习筑牢基础。目录组合数据类型概述Contents0102列表与元组03字典与集合04小结与作业组合数据类型概述01为何需要组合数据类型?在医疗信息系统中,常需处理成组数据(如患者体温序列、血液指标、药品属性)。Python组合数据类型将多数据项整合为整体,极大提升数据处理的灵活性与效率,是构建复杂医疗数据结构与算法的核心基石。医学领域的核心应用场景医学大数据处理:利用列表/元组存储生命体征时间序列数据(如ICU监护数据);通过字典高效管理非结构化病历中的实体与关系,实现海量医疗数据的快速检索与分析。电子病历结构化解析:将患者基本信息、主诉、诊断结果、医嘱等非结构化文本转化为字典的键值对形式,实现病历数据的标准化存储,便于后续的智能统计与临床科研。医学影像元数据管理:DICOM标准影像的设备参数、患者ID、拍摄体位等元数据,天然适配字典的键值存储模式,以DICOM标签为键、参数值为值,简化医学影像数据的读写与管理。10.1组合数据类型概述Python提供的四种核心组合数据类型各有特点,适用于不同的数据组织需求如表10-1所示。类型符号是否有序是否可变是否允许重复典型医学场景列表[]有序可变允许患者连续体温记录、血糖监测数据、科室名单元组()有序不可变允许药品固定信息(ID、名称、规格)字典{key:value}有序可变键不可重复患者档案(姓名、年龄、诊断等键值对)集合{}无序可变不允许患者过敏原去重、药品名称去重、集合运算10.1组合数据类型概述表10-1Python四种核心组合数据类型列表与元组021.列表的定义与特点在Python中,列表是一种常用的数据结构,用于存储一组有序且可变的数据元素。列表使用方括号[]来表示,元素之间用逗号分隔。列表具有以下特点:(1)有序性:列表中的元素按照插入的顺序排列,每个元素都有一个对应的索引,可以通过索引访问或修改元素。(2)可变性:列表是可变对象,即列表中的元素可以被修改、删除或添加。(3)多样性:列表可以包含不同类型的数据元素,例如整数、字符串、布尔值、浮点数,甚至其他列表等。10.2.1组合数据类型概述例如,下面的代码定义了一个列表vital_signs,用于存储患者的体温数据。vital_signs=[36.5,37.2,38.1,37.8,37.5]print(vital_signs)2.列表的创建方法Python提供了多种方法来创建列表。常见的方式包括直接使用方括号初始化列表,以及使用内置函数list()将其他可迭代对象转换为列表。(1)直接初始化列表可以通过在方括号中直接列出元素来创建列表,直接初始化列表的语法简单直观,适用于已知元素的情况,语法格式如下:列名=[元素1,元素2,…]10.2.1组合数据类型概述例如,创建一个名为departments的列表,包含以下科室:“内科”、“外科”、“妇产科”、“儿科”、“急诊科”。departments=["内科","外科","妇产科","儿科","急诊科"]print(departments)(2)list()函数Python的list()构造函数可以将其他可迭代对象(如字符串、元组、集合等)转换为列表。使用list()函数可以方便地将不同类型的可迭代对象转换为列表,从而灵活地初始化列表,list()函数的语法格式1如下:列表名=list() 10.2.1组合数据类型概述list()函数的语法格式2如下:列表名=list(可迭代对象) 3.元素的索引和访问列表中的每个元素都有一个位置编号,称为索引。通过索引可以精确地访问或修改列表中的特定元素。Python的索引体系有两个特点:(1)正向索引:从0开始,从左到右依次递增。第一个元素的索引是0,第二个是1,以此类推,第n个元素的索引是n-1。(2)反向索引:从-1开始,从右到左依次递减。最后一个元素的索引是-1,倒数第二个是-2,以此类推。这在需要快速访问列表尾部数据时非常方便。10.2.1组合数据类型概述通过索引可以访问列表中的单个元素。例如,对于列表vital_signs=[36.5,37.2,38.1,37.8,37.5]:vital_signs[0]:访问第一个元素,结果为36.5;vital_signs[2]:访问第三个元素,结果为38.1;vital_signs[-1]:访问最后一个元素,结果为37.5。提示:访问列表时,索引不能超出范围。对于一个长度为n的列表,有效的正向索引范围是[0,n-1],有效的反向索引范围是[-n,-1],超出这个范围会引发IndexError错误。10.2.1组合数据类型概述列表中的元素都是有序存放的,因此可以直接通过索引来访问列表元素。而Python语言中的列表除了有序性,还有一个很重要的特性:可变性,不仅列表中的元素值可以修改,列表中的元素个数也是可变的。因此,列表的元素也支持修改、添加和删除操作。1.修改元素通过索引赋值可以直接修改列表中的元素,修改元素的语法格式如下:列表名[索引]=新值例如,在一次体温监测中,发现第二次的测量值37.2录入有误,实际应为37.0,可以进行如下修改。10.2.2列表基本操作vital_signs=[36.5,37.2,38.1,37.8,37.5]print(f"修改前:{vital_signs}")vital_signs[1]=37.0print(f"修改后:{vital_signs}")2.添加元素向列表中添加新元素主要有两种方法:append()和insert()。(1)append()方法append()是列表专属的方法之一,用于在指定的列表尾部,即当前最后一个元素的后面,追加指定新元素。append()方法的语法格式如下:列表名.append(新元素)10.2.2列表基本操作例如,为患者新增一次体温记录。vital_signs=[36.5,37.2,38.1,37.8,37.5]vital_signs.append(37.1)print(vital_signs)从上述代码及输出结果可以看出,append()方法在原列表最后一个元素“37.8”后面成功加入了“37.1”这个新元素,同时,vital_signs列表的长度增加为6。(2)insert()方法insert()方法与append()方法最大的不同在于,insert()方法允许为新增加的元素指定插入的位置,其中位置用索引表示。insert()方法的语法格式如下:列表名.inseet(索引,新元素)10.2.2列表基本操作假设需要在最开始补充一次入院时的体温记录36.8。vital_signs.insert(0,36.8)print(vital_signs)insert()方法将“36.8”插入到索引0的位置,vital_signs列表中原来位于索引0及其后的所有元素都向后移了一位,列表长度也增加了1。提示:①append()方法固定在列表的尾部追加新元素,不会影响列表中原来各元素的位置和索引。②insert()方法指定了将新元素插入到列表索引i的位置,将使得列表中原来索引i及其后的元素都后移一位,即索引+1。10.2.2列表基本操作例1:某社区卫生服务中心对一位糖尿病患者的7日空腹血糖监测数据进行校正与补充。原始记录为:glucose=[5.8,6.2,6.5,7.1,6.8,7.3,7.0](单位:mmol/L,对应第1至第7天)。现需完成以下操作:(1)第3天记录6.5因设备故障被确认为错误值,实际应为6.9,请修改;(2)补充第8天新测得的血糖值6.4(追加在末尾);(3)在第1天前补录入院时的基线血糖5.4(插入到最开头);(4)输出每一步操作后的列表及当前长度。10.2.2列表基本操作参考代码如下。#初始数据(7天记录)glucose=[5.8,6.2,6.5,7.1,6.8,7.3,7.0]print("初始数据:",glucose)print("初始长度:",len(glucose))#修改第3天数据(索引为2)glucose[2]=6.9print("修改第3天为6.9后:",glucose)print("当前长度:",len(glucose))10.2.2列表基本操作#追加第8天数据(6.4)到末尾glucose.append(6.4)print("追加第8天数据后:",glucose)print("当前长度:",len(glucose))#在开头插入入院基线值5.4(索引0)glucose.insert(0,5.4)print("插入入院基线值5.4后:",glucose)print("最终长度:",len(glucose))运行结果如下:10.2.2列表基本操作3.删除元素删除元素有多种方式,可以根据索引删除,也可以根据元素的值删除。(1)del语句根据索引删除,不返回被删除的元素。这是一个通用的删除命令,不仅限于列表。del语句的语法格式如下:del列表名[索引]vital_signs=[36.5,37.2,38.1,37.8,37.5]delvital_signs[2]#删除索引为2的元素(37.0)print(vital_signs)10.2.2列表基本操作(2)pop()方法根据索引删除,并返回被删除的元素。若不指定索引,默认删除并返回最后一个元素。pop()方法的语法格式如下:列表名.pop(索引)vital_signs=[36.5,37.2,38.1,37.8,37.5]#delvital_signs[2]last_temp=vital_signs.pop()#删除并获取最后一个体温记录print(f"被移除的最后一次体温是:{last_temp}")print(f'删除后的列表为:{vital_signs}')10.2.2列表基本操作(3)remove()方法根据元素的值删除。如果列表中有多个相同值的元素,只删除第一个匹配。如果元素不存在,会引发ValueError。remove()方法的语法格式如下:列表名.remove(元素值)vital_signs=[36.5,37.2,38.1,37.8,37.5]vital_signs.remove(38.1)#删除值为38.1的元素print(f'删除后的列表为:{vital_signs}')10.2.2列表基本操作提示:①已知待删除元素的索引时,可使用del()命令和pop()方法,其中pop()方法对于删除列表末尾的元素最为简单方便;明确知道待删除元素值时,用remove()方法更为简单。但值得注意的是,当列表中有多个待删除元素时,remove()方法只删除排在最前面的那个元素。②与del()命令和remove()方法不同,pop()方法在删除元素的同时会“弹出”这个被删除的元素如有需要可以用一个变量“接住”它,以便进行后续操作。10.2.2列表基本操作4.判断元素是否存在in和notin被称为成员运算符,用来判断指定的元素是否在列表中。用in运算符时,如果元素在列表中则返回True,否则返回False;用notin运算符时,情况则与in运算符相反。in运算符语法格式如下:元素in列表notin运算符语法格式如下:元素notin列表guests=['刘一','张三','李四','王五','赵六','吴九','郑十']print("张三"inguests)print("张三"notinguests)10.2.2列表基本操作例2:某儿科门诊维护了一份当日候诊患儿名单,在候诊过程中需要进行以下调整:(1)发现第3位患儿的姓名录入重复(与第6位相同),使用del语句按索引删除第3位;(2)最后一位患儿家长临时取消挂号,使用pop()方法移除并记录其姓名,以便后续退费处理;(3)护士接到通知,患儿“刘小明”因已在急诊就诊,需从候诊名单中移除,使用remove()方法按姓名删除;(4)名单中“刘小明”出现了两次,观察remove()的删除行为。10.2.2列表基本操作参考代码如下:#当日候诊患儿名单waiting_list=["张小宝","李小花","刘小明","王小虎","赵小月","刘小明","陈小雨"]print("原始候诊名单:",waiting_list)print("当前人数:",len(waiting_list))#1.用del语句删除第3位患儿(索引为2),该姓名与第6位重复录入delwaiting_list[2]print("del删除索引2后:",waiting_list)print("当前人数:",len(waiting_list))10.2.2列表基本操作#2.用pop()移除最后一位患儿(家长取消挂号),并记录姓名用于退费canceled_patient=waiting_list.pop()print(f"pop()移除的患儿:{canceled_patient}(需办理退费)")print("移除后名单:",waiting_list)print("当前人数:",len(waiting_list))#3.用remove()按姓名删除"刘小明"(已转急诊)waiting_list.remove("刘小明")print(f"remove('刘小明')后:",waiting_list)print("当前人数:",len(waiting_list))10.2.2列表基本操作#4.验证:再次查看名单中是否还有"刘小明"if"刘小明"inwaiting_list:print("注意:名单中仍有'刘小明',remove()只删除了第一个匹配项")else:print("名单中已无'刘小明'")10.2.2列表基本操作运行结果如下:10.2.2列表基本操作参考代码如下。#当日候诊患儿名单waiting_list=["张小宝","李小花","刘小明","王小虎","赵小月","刘小明","陈小雨"]print("原始候诊名单:",waiting_list)print("当前人数:",len(waiting_list))#1.用del语句删除第3位患儿(索引为2),该姓名与第6位重复录入delwaiting_list[2]print("del删除索引2后:",waiting_list)print("当前人数:",len(waiting_list))#2.用pop()移除最后一位患儿(家长取消挂号),并记录姓名用于退费canceled_patient=waiting_list.pop()print(f"pop()移除的患儿:{canceled_patient}(需办理退费)")print("移除后名单:",waiting_list)print("当前人数:",len(waiting_list))#3.用remove()按姓名删除"刘小明"(已转急诊)waiting_list.remove("刘小明")print(f"remove('刘小明')后:",waiting_list)print("当前人数:",len(waiting_list))#4.验证:再次查看名单中是否还有"刘小明"if"刘小明"inwaiting_list:print("注意:名单中仍有'刘小明',remove()只删除了第一个匹配项")else:print("名单中已无'刘小明'")10.2.2列表基本操作1.列表常用方法(1)index()方法index()函数用于在列表中查找指定的元素,如果存在则返回指定元素在列表中的索引;如果存在多个指定元素,则返回最小的索引值;如果不存在,会直接报错。使用index()函数可以方便地定位列表中目标元素的位置,从而实现数据的精准查找,index()方法的语法格式如下:列表.index(元素)guests=['刘一','张三','李四','王五','赵六','吴九','郑十']print(guests.index("张三"))print(guests.index("张"))10.2.3列表方法与函数(2)count()方法count()方法用于统计并返回列表中指定元素的个数;如果列表中不存在指定元素,则返回0。使用count()方法可以方便地统计列表中目标元素的出现次数,从而实现数据的频次分析,count()方法的语法格式如下:列表.count(元素)guests=['刘一','张三','李四','王五','赵六','吴九','郑十']print(guests.count("张三"))print(guests.count("张"))从代码执行的结果能看出,当使用count()方法统计列表中没有的元素时,系统返回的是0。10.2.3列表方法与函数提示:index()方法在查找列表中不存在的元素时会引起系统报错,为了避免这种情况,可以预先确认下待查元素是否在列表中,具体有如下两种方法。(1)使用in或者notin,通过返回值确认。(2)使用count()方法,通过元素个数是否为0来确认。10.2.3列表方法与函数2.列表常用内置函数Python内置函数可直接用于列表操作,无需额外导入模块,常用函数如下:(1)len()函数Python的len()函数是内置的通用计数工具,可直接获取列表中元素的总数量,无需额外导入模块,语法格式如下:len(list_name)10.2.3列表方法与函数(2)sorted()函数sorted()函数用于对列表元素排序,默认升序排列,也可通过指定参数reverse=True实现降序排列。该函数会返回一个新的排序后列表,不会修改原列表的元素顺序,语法格式如下:sorted(list_name,reverse=True)说明:返回排序后的新列表,不修改原列表,适合医疗数据、库存数据的整理排序。10.2.3列表方法与函数元组与列表非常相似,也是有序的元素集合。两者的不同之处主要有两点:(1)元组使用圆括号0,列表使用方括号[]。(2)元组一旦创建,其元素就不能被修改、添加或删除。可以将元组理解为不能修改的列表,用来存放多个相关的、但不能被修改的数据。因为其元素不能修改,所以列表中所有会修改元素的操作均不适合元组,除此以外元组的操作和列表基本一致。10.2.4元组创建与操作1.元组的创建元组使用圆括号“()”来定义,元素间用逗号分隔。在很多情况下,圆括号也可以省略。例如,需定义一个存储药品固定信息的元组(ID,名称,规格)。drug_info=("D00123","阿莫西林胶囊","0.25g")#省略括号创建元组patient_coords=39.9,116.3#代表经纬度坐标#访问元组元素的方式与列表相同print(f"药品名称:{drug_info[1]}")#尝试修改元组会引发错误drug_info[2]="0.5g"10.2.4元组创建与操作若定义只含一个元素的元组时,必须在元素后加一个逗号,否则会被解释为普通的值。single_element_tuple=("高血压",)not_a_tuple=("高血压")print(type(single_element_tuple))print(type(not_a_tuple))10.2.4元组创建与操作2.元组的应用场景尽管元组的功能看起来比列表受限,但其不可变性带来了几个重要的优点和应用场景:(1)保护数据不被意外修改:当程序需要传递一组不应被更改的数据时,使用元组比列表更安全。例如,函数返回的多个值、数据库记录等。(2)作为字典的键:字典的键必须是不可变类型,因此元组可以作为字典的键,而列表不能。这在需要用复合数据作为唯一标识时非常有用,例如用(经度,纬度)元组作为键来存储地理位置信息。(3)性能优化:通常情况下,元组的创建和遍历速度比列表稍快,占用的内存也更少。对于固定的数据集,使用元组是更好的选择。10.2.4元组创建与操作例3:某医院影像科室需要对CT检查记录进行归档管理。每条影像记录包含四项固定元数据:检查编号、患者姓名、检查部位、设备型号(“DCM20240501”,“李明”,“胸部CT”,“SIEMENS-SOMATOM”)。归档要求如下:(1)需快速定位首尾字段;(2)需单独提取中间两项患者相关信息;(3)需确认某检查部位的存储位置。请使用元组完成上述归档操作。10.2.4元组创建与操作参考代码如下:#创建影像元数据元组dicom_meta=("DCM20240501","李明","胸部CT","SIEMENS-SOMATOM")#通过正向索引与反向索引分别访问首尾字段print(f"检查编号:{dicom_meta[0]}")print(f"设备型号:{dicom_meta[-1]}")patient_meta=dicom_meta[1:3]print(f"患者信息:{patient_meta}")#统计元组长度,查询"胸部CT"所在索引位置print(f"'胸部CT'位于索引:{dicom_meta.index('胸部CT')}")10.2.4元组创建与操作运行结果如下:10.2.4元组创建与操作字典与集合031.字典的定义与结构字典是Python中一种无序的键值对集合,用于存储具有映射关系的数据。其中,“键”必须是不可变数据类型(如字符串、数字、元组),且具有唯一性;“值”可以是任意数据类型(如字符串、数字、列表、字典等),可重复。在医疗健康场景中,字典非常适合存储结构化的医疗数据,例如患者的个人信息、检查报告结果、药品信息等。例如,用字典存储一位患者的基本信息,“键”可以是“患者ID”、“姓名”、“年龄”、“性别”,“值”对应具体的患者数据,实现“属性-数据”的映射。10.3.1字典结构与创建2.字典的创建方法(1)直接使用大括号创建字典字典使用大括号“{}”定义,键(key)和值(value)之间用冒号“:”分隔,键值对之间用逗号“,”分隔。键必须是不可变且唯一的。字符串、数字和元组是常见的键类型。列表、字典或集合不能作为键。值可以是任意数据类型,并且可以重复,语法格式如下:{key1:value1,key2:value2,...,keyn:valuen}10.3.1字典结构与创建(2)使用dict()函数创建使用dict()函数可以快速创建字典,无需手动编写大括号和冒号,直接以“关键字=值”的形式传入参数,dict()函数的语法格式1如下:dict(key1=value1,key2=value2,...)dict()函数的语法格式2如下:dict(可迭代对象)10.3.1字典结构与创建3)空字典创建空字典即不包含任何键值对的字典,主要用于后续动态添加数据。创建空字典可使用dict()函数或直接使用空大括号{},两种方式效果完全相同,语法格式如下:dict()或{}(4)使用字典推导式创建字典推导式是一种简洁高效的创建方式,可通过循环和条件表达式快速生成字典,语法格式如下:{key:valueforkey,valuein可迭代对象}10.3.1字典结构与创建字典的基本操作主要包括:获取值、修改值、添加键值对、删除键值对,以及判断键是否存在等。1.获取字典中的值获取字典值有3种常用方法,核心是通过“键”获取对应“值”,具体如下:(1)使用“字典名[键]”获取通过字典名[键]的方式可以直接获取字典中对应键的值,是最简洁、最常用的取值方式。若键不存在,会直接报错,语法格式如下:dict_name[key]说明:若键不存在,会报错(KeyError),需注意键的正确性。10.3.2字典基本操作(2)使用get()方法获取使用get()方法可以安全获取字典中指定键对应的值,若键不存在不会报错,而是返回None或自定义默认值,语法格式如下:dict_name.get(key,default=None)说明:若键存在,返回对应值;若键不存在,返回默认值(默认值可自定义),不会报错,适合不确定键是否存在的场景。(3)使用items()、keys()、values()方法批量获取①items():返回字典中所有键值对,以元组形式组成的可迭代对象,适合批量遍历;②keys():返回字典中所有键,适合批量获取属性;③values():返回字典中所有值,适合批量获取数据。10.3.2字典基本操作2.修改字典中的值修改字典中值的语法格式如下:dict_name[key]说明:若键存在,修改对应值;若键不存在,会自动添加该键值对(等同于添加操作)。3.删除字典中的键值对(1)使用del语句删除del语句用于删除字典中指定键对应的键值对,也可直接删除整个字典。删除指定键值对时,若键不存在会直接报错,del语句的语法格式如下:deldict_name[key]10.3.2字典基本操作(2)使用pop()方法删除pop()方法可删除字典指定键的键值对,删除后会返回该键对应的值,键不存在则触发报错,pop()方法的语法格式如下:dict_name.pop(key,default=None)说明:若键存在,删除键值对并返回对应值;若键不存在,返回默认值,不报错。(3)使用popitem()方法删除popitem()方法默认删除字典末尾的键值对,删除后会以元组形式返回对应的键与值,popitem()方法的语法格式如下:dict_name.popitem()说明:删除字典中最后一个键值对,并返回该键值对(元组形式);若字典为空,会报错。10.3.2字典基本操作(4)使用clear()方法清空字典clear()方法用于清空字典中所有的键值对,执行后字典会变成空字典,不会删除字典本身,clear()方法的语法格式如下:dict_name.clear()说明:清空字典中所有键值对,字典变为空字典(仍存在,只是无数据)。4.判断键是否存在判断键是否存在的语法格式如下:keyindict_name或keynotindict_name说明:返回布尔值(True/False),用于判断字典中是否存在指定键,避免获取/删除时报错。10.3.2字典基本操作例4:判断患者信息字典中是否有“既往病史”和“过敏史”键,若有则打印对应值,若无则提示“未记录”。10.3.2字典基本操作参考代码如下:patient_info={"patient_id":"PY2024001","name":"张三","age":53,"gender":"男","department":"呼吸内科","past_history":"高血压5年,规律服用降压药"}10.3.2字典基本操作#判断“既往病史”是否存在if"past_history"inpatient_info:print(f"既往病史:{patient_info['past_history']}")else:print("既往病史:未记录")#判断“过敏史”是否存在if"allergy_history"inpatient_info:print(f"过敏史:{patient_info['allergy_history']}")else:print("过敏史:未记录")10.3.2字典基本操作运行结果如下:10.3.2字典基本操作1.字典常用方法(1)copy()方法copy()方法用于对字典进行浅复制,生成一个与原字典内容相同的独立新字典,修改新字典不会影响原字典,copy()的语法格式如下:dict_name.copy()说明:创建一个与原字典完全相同的新字典,修改新字典不会影响原字典10.3.3字典方法与函数2)fromkeys()方法fromkeys()方法根据指定序列批量创建新字典,统一设置初始键值,fromkeys()的语法格式如下:dict.fromkeys(iterable,value=None)说明:iterable为可迭代对象(如列表、元组),作为新字典的键;value为所有键的默认值(可自定义),适合批量创建结构相同的字典。10.3.3字典方法与函数(3)setdefault()方法setdefault()方法用于获取指定键的值;如果键不存在,则自动添加该键值对到字典中,setdefault()的语法格式如下:dict_name.setdefault(key,default=None)说明:若键存在,返回对应值,不修改字典;若键不存在,添加该键值对(键为key,值为default),并返回default。与get()方法的区别:setdefault()会添加键值对,get()不会。10.3.3字典方法与函数2.字典常用内置函数Python内置函数可直接用于字典操作,无需额外导入模块,常用函数如下:(1)len()函数len()函数用于获取字典中键值对的总个数,是字典最常用的统计函数,len()函数的语法格式如下:len(dict_name)10.3.3字典方法与函数(2)sorted()函数sorted()函数用于对字典的键进行排序,默认升序排列,返回排序后的键列表,不会修改原字典,sorted()函数的语法格式如下:sorted(dict_name.keys())或sorted(dict_name.items())说明:返回排序后的键列表(或键值对列表),默认按升序排序,适合批量整理医疗数据。10.3.3字典方法与函数1.集合的创建创建集合主要有两种方式:(1)使用大括号{}将一组用逗号分隔的元素放在大括号内即可创建一个集合,语法格式如下:集合名={元素1,元素2,元素3,...,元素n}例如,医院需要为患者建立过敏原档案,使用集合可以确保每种过敏原只记录一次,避免重复。#创建一个存储患者过敏原的集合allergens={"青霉素","磺胺","阿司匹林","头孢菌素","碘"}print(allergens)10.3.4集合创建与操作(2)使用set()函数set()函数可以将列表、元组、字符串等可迭代对象转换为集合,并在此过程中自动去除重复元素,set()函数的语法格式如下:集合名=set(可迭代对象)2.集合的基本操作集合是可变数据类型,支持动态地添加和删除元素,同时可以解决数学中的集合问题。(1)添加元素add():向集合中添加单个元素,如果元素已存在,则不执行任何操作,add()的语法格式如下:集合名.add(元素)10.3.4集合创建与操作update():将一个可迭代对象(列表、元组、字符串、字典(添加键)、集合等)中的所有元素添加到集合中,update()的语法格式如下:集合名.update(可迭代对象)(2)删除元素remove():从集合中删除指定的元素,如果元素不存在,会引发KeyError错误,remove()的语法格式如下:集合名.remove(元素)10.3.4集合创建与操作discard():从集合中删除指定的元素。如果元素不存在,不会报错,而是静默处理。在不确定元素是否存在时,使用此方法更安全。discard()的语法格式如下:集合名.discard(元素)pop():随机删除并返回集合中的一个元素。如果集合为空,会引发KeyError。pop()的语法格式如下:被删除的元素=集合名.pop()10.3.4集合创建与操作(3)数学集合运算数学中集合的4种核心运算,Python都能通过运算符或方法快速实现,如表10-3所示:表10-3Python实现数学的集合运算10.3.4集合创建与操作数学运算Python运算符Python方法含义交集&intersection()同时属于两个集合的元素并集|union()属于任意一个集合的所有元素(去重)差集-difference()属于第一个集合、不属于第二个集合的元素对称差集^symmetric_difference()只属于其中一个集合的元素(并集-交集)综合应用04例5:某医院的药房需要管理药品库存,请完成以下操作:(1)创建一个药品库存集合,包含以下药品:“阿司匹林”、“青霉素”、“胰岛素”、“布洛芬”、“头孢”、“维生素C”;(2)演示三种删除方法的不同使用场景:使用remove()删除指定药品,使用discard()安全删除可能不存在的药品,使用pop()随机删除一个药品;(3)对比remove()和discard()在删除不存在元素时的不同表现。综合应用参考代码如下:#创建初始药品库存集合drugs_stock={"阿司匹林","青霉素","胰岛素","布洛芬","头孢","维生素C"}print(f"初始库存:{drugs_stock}(共{len(drugs_stock)}种)")#remove()删除存在的元素drugs_stock.remove("头孢")print(f"remove('头孢')后:{drugs_stock}")#discard()删除存在的元素drugs_stock.discard("青霉素")print(f"discard('青霉素')后:{drugs_stock}")综合应用#对比remove和discard处理不存在的元素drugs_stock.discard("感冒灵")#discard不会报错print(f"discard('感冒灵')后:{drugs_stock}")if"感冒灵"indrugs_stock:drugs_stock.remove("感冒灵")else:print("remove('感冒灵')失败(元素不存在,否则会引发KeyError)")print(f"库存不变:{drugs_stock}")#pop()随机删除一个元素综合应用ifdrugs_stock:removed=drugs_stock.pop()print(f"pop()随机删除了'{removed}',剩余:{drugs_stock}")#清空集合print("开始清空库存:")whiledrugs_stock:print(f"删除{drugs_stock.pop()},剩余:{drugs_stock}")print("库存已清空")#尝试对空集合pop()empty_set=set()综合应用ifnotempty_set:print("空集合无法pop()(否则引发KeyError)")运行结果如下:综合应用例6:某医院检验科统计糖尿病患者和高血压患者的病历编号:糖尿病患者集合:diabetes={1001,1003,1005,1007,1009}高血压患者集合:hypertension={1005,1007,1011,1013,1015}请用集合解决以下临床统计问题:(1)同时患有糖尿病和高血压的患者(并发症患者);(2)患有糖尿病或高血压(含两种都有)的总患者数;(3)只患糖尿病、不患高血压的患者;(4)只患其中一种病(不同时患两种)的患者。综合应用参考代码如下:#定义医学相关集合:糖尿病患者、高血压患者(病历编号)diabetes={1001,1003,1005,1007,1009}hypertension={1005,1007,1011,1013,1015}#交集:同时患两种病(糖尿病∩高血压)both=diabetes&hypertension
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年备考人力资源管理专业知识与实务 押题练习试题(备用卷)含答案
- 工厂安全培训课件
- 2027年备考VIP押题班.初级实务通关题库(附答案)
- 工程安全资源课件
- 工程案例首页课件
- 告白祖国课件
- 商务信息多色彩碰撞工作总结
- 2027年备考公务员行政能力测试 真题练习试题(备用卷)附答案
- 商务简约个人简历模板
- 2027年备考VIP押题班.初级实务考前冲刺试题(备用卷)含答案
- 家庭保洁作业安全方案
- DELE A1西班牙语全真模拟试题(含详细答案解析)
- 2026年新疆中考语文真题及答案解析
- 2026年《安全员》考试试题及答案
- 出土坡道施工方案
- 物业应急指挥体系建设手册
- 关于手术室医疗废物泄漏的应急预案演练脚本
- 2026年新人教版三年级上册数学第五单元《线和角》教学设计
- 水利水电工程单元工程施工质量检验表与验收表(SLT631.5-2025)
- 2025年消防执法辅助员笔试题目及答案
- 2025兵团连队职工考试试题及答案解析
评论
0/150
提交评论