第二章 AI编程之基-Python基础从认知到实践(2.3 复合数据类型)_第1页
第二章 AI编程之基-Python基础从认知到实践(2.3 复合数据类型)_第2页
第二章 AI编程之基-Python基础从认知到实践(2.3 复合数据类型)_第3页
第二章 AI编程之基-Python基础从认知到实践(2.3 复合数据类型)_第4页
第二章 AI编程之基-Python基础从认知到实践(2.3 复合数据类型)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CHAPTER02·教学课件AI编程之基——Python基础从认知到实践本讲范围:2.3复合数据类型(列表/元组/字典/集合)王丹丹2026.10.22从一蟹一笼的"数字公寓"出发,掌握Python四种复合数据类型,学会组织、存储与处理多维数据——用数据逻辑解决现实世界的问题。配套教材:《人工智能基础:案例驱动的技术认知与应用》第2章SECTION2.3·CASESTUDY导读案例:一蟹一笼背后的"数据革命"2.3·导读案例——从青蟹养殖看数据的力量2025年,在浙江台州市三门县的一间现代化养殖车间里,数百只青蟹被安置在独立透明的"数字公寓"中,每只都配有专属编号、传感器和摄像头。这不是科幻电影,而是我国智慧农业的真实图景——借助AI与物联网技术,传统水产养殖正经历一场静悄悄却深刻的"数据革命"。青蟹养殖是我国沿海地区重要的农业产业,但传统养殖方式无法预测蜕壳时间,养殖户只能守在塘边整夜巡查,许多软壳蟹因错过最佳捕捞时机而死亡;群养模式下高达40%的伤亡率,让养殖户投入多、回报少,产业发展举步维艰。为解决这些难题,项目团队提出了"青蟹数字公寓"集约化养殖系统(见图2-16),其核心正是数据感知、处理与智能决策。图2-16"青蟹数字公寓"集约化养殖系统(教材原图)课堂思考数百只青蟹,每只都有编号、品种、体重、蜕壳记录、环境偏好……这些多维度、批量化的数据,在Python中应该用什么来存储和组织?内容来源:教材2.3节导读案例(图2-16)02SECTION2.3·CASESTUDY案例解析:三大系统,一场"数据革命"2.3·导读案例(1)独立笼养系统通过"一蟹一笼"实时采集个体行为数据,避免蟹斗,提升存活率。(2)蜕壳预测模型基于视觉传感器技术与先进的AI模型相融合,提取青蟹体态、活动频率等多维特征数据,实现蜕壳前兆92.5%的准确识别。(3)智能环境调控依托多源传感器实时监测水温、溶氧、pH值等数据,动态调整养殖环境,引导集中蜕壳。数据成果与使命担当这一系统不仅将青蟹存活率从不足8%提升至70%,更彰显了我国科技工作者以创新驱动乡村振兴的使命担当。项目团队深入养殖一线,将实验室中的AI算法与养殖户的实际需求紧密结合,用数据智能破解产业难题,真正实现了"科技为民、数据赋能"。本节即将进入Python复合数据类型的学习列表、字典、集合等数据结构,正是我们组织、存储与处理如青蟹生长数据、环境参数、蜕壳记录等多维信息的关键工具。掌握它们,不仅是为了编写更高效的代码,更是为了将来能在智慧农业、智能制造、医疗健康等领域,用数据逻辑解决现实世界的问题,以技术报国之心,践行为民服务之责。内容来源:教材2.3节导读案例03SECTION2.3.1·LIST列表:有序数据的存储与增删改查操作2.3.1·列表列表是Python中最灵活、应用最广泛的复合数据类型,属于有序、可变的序列结构,能够存储任意数量、任意数据类型的元素(如数字、字符串、列表等),如图2-17所示。列表支持在程序运行时动态添加、删除、修改元素,是处理批量数据的首选工具。(1)列表的创建。主要有两种核心方式:使用方括号[]直接创建,或者通过list()函数转换创建。注意:list()函数的参数必须是可迭代对象(如字符串、元组、集合等),否则会触发报错。#创建青蟹基础信息列表(二维列表存储多只青蟹的编号、品种、初始体重)crab_info=[["C001","三门青蟹",125.5],["C002","三门青蟹",118.2],["C003","锯缘青蟹",132.8]]#创建单只青蟹7天体重变化的时序列表crab_c001_weight=[125.5,128.3,130.1,132.7,135.2,138.5,140.2]图2-17列表显示青蟹数据(教材原图)读图:每只青蟹一行记录——编号、品种、初始体重。多行记录按顺序排列、可随时增删,正是"列表"存储批量数据的直观写照。内容来源:教材2.3.1节(图2-17)04SECTION2.3.1·LIST列表的核心操作①②:添加与删除元素2.3.1·列表(2)列表的核心操作。围绕元素的增、删、改、查展开,常用方法如下:append()(末尾添加)、insert()(指定位置添加)、remove()(按值删除)、pop()(按索引删除)等。①添加元素常用append()(末尾添加)、insert()(指定位置添加)等方法。#末尾新增1只青蟹信息crab_info.append(["C004","三门青蟹",98.9])#在索引1位置插入1只青蟹信息crab_info.insert(1,["C005","锯缘青蟹",121.3])②删除元素remove()方法可删除列表中的特定元素,pop()方法可删除指定位置的元素,若不指定位置,则默认删除最后一个元素。#删除编号为C005的青蟹信息(按值删除)crab_info.remove(["C005","锯缘青蟹",121.3])#删除最后1只青蟹信息(按索引删除)crab_info.pop()对比记忆append()加在末尾,insert()插队到指定位置;remove()按"值"找人,pop()按"位置"请离。养殖编号新增、淘汰个体移除——青蟹档案的动态维护,靠的就是这组增删方法。内容来源:教材2.3.1节(2)列表的核心操作05SECTION2.3.1·LIST列表的核心操作③:索引、切片与循环遍历2.3.1·列表(3)列表的访问。通过索引(正向从0开始,反向从-1开始)访问单个元素,也可通过切片list[start:end:step]提取部分元素,或者通过循环遍历所有元素。#正向索引访问C002的初始体重print("C002的初始体重:",crab_info[1][2])#反向索引访问最后1只青蟹的品种print("最后1只青蟹的品种:",crab_info[-1][1])#循环遍历所有青蟹的编号forcrabincrab_info:

print("青蟹的编号:",crab[0])索引crab_info[1][2]:第2只青蟹(索引1)的第3个字段(索引2)→初始体重。切片list[start:end:step]:起点、终点、步长三段式,含头不含尾,可批量提取连续记录。循环遍历for循环逐个取出元素,配合2.2节的循环结构,即可批量处理全部青蟹档案。内容来源:教材2.3.1节(3)列表的访问06SECTION2.3.1·LIST列表推导式:一行代码生成目标列表2.3.1·列表(4)列表推导式。是创建列表的简洁方式,格式为变量名=[表达式for变量in可迭代对象],可快速生成满足特定条件的列表。#生成0~10整数的平方列表squares=[x**2forxinrange(11)]print(squares)#筛选青蟹信息列表中所有三门青蟹的编号sanmen_crab_ids=[crab[0]forcrabincrab_infoifcrab[1]=="三门青蟹"]print("三门青蟹的编号:",sanmen_crab_ids)结构拆解[表达式for变量in可迭代对象if筛选条件]——for负责"遍历取数",if负责"按条件筛选",表达式负责"决定要留下什么"。从几百条养殖记录中筛出目标个体,一行就能完成。内容来源:教材2.3.1节(4)列表推导式07SECTION2.3.1·LIST多维列表:列表中再装列表2.3.1·列表(5)多维列表。多维列表的元素为列表(如二维列表的元素是一维列表),可通过列表名[行索引][列索引]获取元素,也可利用循环生成。根据本节案例,具体代码示例如下。#直接创建二维列表(青蟹蜕壳记录:编号、日期、时长)molt_records=[["C001","2025-09-10",3.8],["C002","2025-10-12",4.2]]#访问C001的蜕壳时长print("C001的蜕壳时长:",molt_records[0][2])#循环生成3行4列的随机数据列表(模拟青蟹环境监测数据)importrandomenv_matrix=[[random.randint(5,10)forjinrange(4)]foriinrange(3)]print("环境监测数据矩阵:",env_matrix)理解要点:二维列表就像一张表格——第一个索引选"行"(哪只青蟹/哪条记录),第二个索引选"列"(编号、日期还是时长);嵌套推导式则可一键生成监测数据矩阵。内容来源:教材2.3.1节(5)多维列表08SECTION2.3.2·TUPLE元组:不可变序列的创建2.3.2·元组元组与列表类似,为有序序列,但元组创建后不可变,虽灵活性不足,但执行效率更高,尤其适合用作字典的键或函数的返回值。Python支持通过索引、切片访问元组元素,也可在循环中遍历元组。(1)元组的创建。可使用()或tuple()函数,当创建包含单个元素的元组时,元素后需要加逗号,否则会被视为普通数据类型。#创建空元组empty_tuple=()#创建包含单个元素的元组(必须加逗号)single_element_tuple=(25.0,)#直接创建青蟹蜕壳特征阈值元组(体态变化率、活动频率阈值)molt_threshold=(0.35,5.2)#通过tuple()函数转换创建元组(从列表转换)list_to_tuple=tuple(["C001","三门青蟹",125.5])易错提醒:(25.0)是数字,(25.0,)才是元组——单元素元组的逗号不能省。内容来源:教材2.3.2节(1)元组的创建09SECTION2.3.2·TUPLE元组的使用:访问、拆包与"不可变"2.3.2·元组(2)元组的使用。支持元素访问、拆包等操作,但无法修改元素,否则会引发TypeError。#访问元组元素(青蟹环境参数安全范围)env_safe_range=((22.0,28.0),(5.0,8.0),(7.5,8.5))#(水温、溶氧、pH值)print("水温安全范围:",env_safe_range[0])#元组拆包(提取青蟹蜕壳阈值)body_change_thr,activity_freq_thr=molt_thresholdprint("体态变化率阈值:",body_change_thr)#尝试修改元组元素(会报错)#env_safe_range[0]=(23.0,29.0)#TypeError:'tuple'objectdoesnotsupportitemassignment拆包(解包)左侧变量个数与元组元素一一对应,一次赋值同时取出全部阈值,代码更简洁。为什么"不可变"反而是优点?安全范围、阈值这类"定下来就不该动"的标准数据,用元组存储可防止被程序误改。内容来源:教材2.3.2节(2)元组的使用10SECTION2.3.3·DICTIONARY字典:键值对的创建(嵌套数字档案)2.3.3·字典字典是无序的键值对集合,键具有唯一性且必须是不可变类型(如字符串、数字型或元组),通过键可快速访问、添加或修改对应的值,是处理关联数据的高效工具。在青蟹养殖场景中,可用于存储单只青蟹的完整档案、传感器实时数据等多维度关联信息。(1)字典的创建。可使用{}直接定义键值对,也可通过dict()函数创建。#直接创建单只青蟹的完整数字档案(嵌套列表、字典)crab_c001_profile={

"crab_id":"C001",

"species":"三门青蟹",

"current_weight":140.2,

"molt_history":[{"date":"2025-09-10","duration":3.8},{"date":"2025-10-12","duration":4.2}],

"env_preference":{"temp":(24.0,26.0),"dissolved_oxygen":(6.5,7.5)}}观察:值可以是数字、字符串,也可以是列表(蜕壳记录)甚至另一个字典(环境偏好)——字典让"一只蟹的完整档案"层次清晰。内容来源:教材2.3.3节(1)字典的创建11SECTION2.3.3·DICTIONARY字典的创建(续):传感器数据与dict()函数2.3.3·字典方式一:{}直接定义传感器实时数据字典——键为传感器编号,值为(监测值,采集时间)元组。#直接创建传感器实时数据字典#(传感器编号→(监测值,采集时间))sensor_real_time={

"TEMP_001":(25.3,"2025-11-2008:30:00"),

"DO_001":(6.8,"2025-11-2008:30:00"),

"PH_001":(8.1,"2025-11-2008:30:00")}方式二:dict()函数创建以"键=值"的关键字形式传入,键自动转为字符串。#通过dict()函数创建字典dict_from_func=dict(crab_id="C002",species="三门青蟹",current_weight=118.2)回顾键的规则键必须唯一且为不可变类型(字符串、数字、元组)——上例中"传感器编号→(监测值,时间)元组"正是2.3.2节元组作为字典值嵌套使用的典型场景。内容来源:教材2.3.3节(1)字典的创建12SECTION2.3.3·DICTIONARY字典的操作①:按键访问值2.3.3·字典(2)字典的操作——①访问值:通过字典变量[键]或get(key)方法获取指定键的值,get()方法在键不存在时返回默认值(避免报错)。根据本节案例,代码示例如下。#通过键访问C001当前体重print("C001当前体重:",crab_c001_profile["current_weight"])#通过get()方法访问溶氧传感器数据(键不存在时返回"无数据")do_data=sensor_real_time.get("DO_001","无数据")print("溶氧数据:",do_data)字典变量[键]写法直接、执行高效;但键不存在时会抛出KeyError,适合"确定键一定存在"的场景。get(key,默认值)键不存在时返回指定默认值而非报错,更稳健——传感器离线、数据缺失时程序依然正常运行。内容来源:教材2.3.3节(2)字典的操作①13SECTION2.3.3·DICTIONARY字典的操作②③:添加/修改与删除元素2.3.3·字典②添加/修改元素通过字典变量[键]=值实现:键已存在则修改值,否则添加新的键值对。#修改C001当前体重crab_c001_profile["current_weight"]=142.5#新增C001的最新蜕壳记录crab_c001_profile["molt_history"].append({"date":"2025-11-15","duration":4.5})#新增pH值传感器的监测状态sensor_real_time["PH_001_status"]="正常"③删除元素pop(key)方法可删除指定键的元素。根据本节案例,代码示例如下。#青蟹养殖传感器数据sensors={"TEMP":25.3,"DO":6.8,"PH":8.1}#删除已停用的pH值传感器数据sensors.pop("PH")#用del语句删除pH值传感器的监测状态delsensor_real_time["PH_001_status"]对比记忆赋值语句"一键两用"——键在则改、键不在则增;删除可选pop(key)(还能拿到被删的值)或del语句(直接删除)。体重更新、蜕壳记录追加、停用传感器下线,都是养殖档案的日常维护动作。内容来源:教材2.3.3节(2)字典的操作②③14SECTION2.3.3·DICTIONARY字典的操作④:遍历与查看2.3.3·字典④遍历与查看:items()返回所有键值对,keys()返回所有键,values()返回所有值。结合for循环即可批量巡检全部监测数据。#查看所有传感器编号(键)print(sensor_real_time.keys())#查看所有监测数据(值)print(sensor_real_time.values())#遍历全部键值对,逐条巡检forsid,datainsensor_real_time.items():

print(f"{sid}→{data}")keys()/values()分别拿到"所有键"和"所有值"的视图,可快速核对监测点是否齐全。items()+for循环每次循环同时解包出键和值,是字典遍历的标准写法。案例联想水质大屏上滚动显示的每组"传感器→读数",背后正是items()的批量遍历。内容来源:教材2.3.3节(2)字典的操作④(遍历示例结合本节案例数据编写)15SECTION2.3.4·SET集合:无序不重复数据的创建2.3.4·集合集合用于存储无序且唯一的元素集,支持数学上的并集、交集、差集等运算,集合本身可变,可添加或删除元素,但其内部元素必须是不可变类型。在青蟹养殖场景中,适用于监测编号去重、异常参数类型统计等需求。(1)集合的创建。可使用{}或set()函数,注意使用{}创建空对象时,得到的是空字典而非空集合。#直接创建集合(青蟹监测编号,自动去重)monitor_ids={"C001","C002","C003","C002","C001"}print("去重后的监测编号:",monitor_ids)#创建空集合(必须使用set()函数)empty_set=set()#通过set()函数转换创建集合(从列表转换)abnormal_records=["水温","溶氧","水温","pH值"]unique_abnormal=set(abnormal_records)print("唯一异常参数类型:",unique_abnormal)自动去重:写入重复的"C001"、"C002"只保留一份;列表转集合,是"异常参数类型统计"最快捷的去重手段。内容来源:教材2.3.4节(1)集合的创建16SECTION2.3.4·SET集合的操作①②:添加与删除元素2.3.4·集合①添加元素add()方法添加单个元素,update()方法添加多个元素(可迭代对象)。monitor_ids.add("C004")#添加单个监测编号monitor_ids.update(["C005","C006"])#添加多个监测编号print("添加后的监测编号:",monitor_ids)②删除元素remove():元素不存在则抛出异常;discard():元素不存在时不抛出异常。#删除编号C006(元素存在,正常删除)monitor_ids.remove("C006")#删除编号C007(元素不存在,不报错)monitor_ids.discard("C007")print("删除后的监测编号:",monitor_ids)如何选择remove()还是discard()?希望"删不掉就提醒我"(数据理应存在)用remove();不确定元素是否存在、追求程序稳健(如清理可能重复的离线编号)用discard()。内容来源:教材2.3.4节(2)集合的操作①②17SECTION2.3.4·SET集合的操作③:并、交、差运算2.3.4·集合③集合运算:union()方法实现并运算,intersection()方法实现交运算,difference()方法实现差运算。#计划监测编号集合与实际监测编号集合planned_ids={"C001","C00

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论