news 2026/4/16 12:59:00

【Python全栈开发】第2讲 | 数据结构全实战、流程控制与 Pythonic 迭代艺术

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Python全栈开发】第2讲 | 数据结构全实战、流程控制与 Pythonic 迭代艺术

【Python全栈开发】第2讲 | 数据结构全实战、流程控制与 Pythonic 迭代艺术


1. 架构师视角:数据结构就是你的“收纳盒”

兄弟们,如果你把上一讲的变量看作是单个的零件,那这一讲的数据结构就是你的“工具箱”或者“收纳盒”。

在全栈开发里,能不能选对收纳盒,直接决定了你找东西的速度(性能)和代码写得累不累。我带过很多新人,最常见的毛病就是**“一招鲜吃遍天”**,不管啥数据都往列表(List)里塞。结果项目稍微一复杂,代码写得像老太婆的裹脚布,又臭又长,跑起来还卡。

今天,咱们就来聊聊 Python 的四大核心收纳盒,顺便把怎么指挥程序干活(流程控制)给讲透。


2. 四大核心收纳盒:别再只会用列表了!

2.1 列表 (List):你的“超级购物清单”

列表就像是一张长长的购物清单,你可以往里加东西,也可以划掉东西。

  • 特点:东西是有序的。你可以指着清单说:“我要第 1 个”。
  • 常用神技
    • append():往清单最后加个新玩意。
    • pop():把最后一个东西拿出来(顺便从清单上划掉)。
    • 切片 (Slicing):这是 Python 的神技!
      my_list=["Python","Java","Go","C++","Rust"]print(my_list[1:3])# ["Java", "Go"] -> 从索引1开始到3之前print(my_list[::-1])# ["Rust", "C++", "Go", "Java", "Python"] -> 一行代码直接反转!

2.2 元组 (Tuple):存进“保险柜”的数据

元组跟列表长得很像,但它有个硬脾气:一旦存进去,就别想改

  • 为啥要用它?
    1. 安全:比如你存的是数据库的连接地址和端口("127.0.0.1", 3306),你不希望程序跑着跑着把端口给改了吧?
    2. :因为它不可变,Python 内部对它的处理效率比列表高得多。
  • 帅气的解包 (Unpacking)
    point=(10,20)x,y=point# 一行代码把坐标拿出来,别再用 point[0], point[1] 了,太土。

2.3 字典 (Dict):你的“手机通讯录”

字典不讲先后顺序,它讲“对应关系”(Key-Value)。

  • 原理:就像通讯录,你搜“张三”,它立马给你弹出号码。这个搜的过程超级快,不管你存了 10 个人还是 10 万个人,速度几乎是一样的。
  • 避坑指南
    • 直接用contacts["王五"]如果没找到人,程序会直接报错崩掉。
    • 老司机写法contacts.get("王五", "查无此人")。即使没找到,它也会温和地返回一个默认值。

2.4 集合 (Set):自带“查重功能”的箩筐

集合最厉害的地方在于:它不准有重复的东西,而且它查东西的速度飞快。

  • 妙用:你有一堆乱七八糟带重复的用户 ID,往集合里一扔set(user_ids),立马就清爽了。
  • 数学运算
    class_a={"张三","李四","王五"}class_b={"王五","赵六","钱七"}print(class_a&class_b)# 交集:两个班都选了课的同学 -> {"王五"}print(class_a|class_b)# 并集:所有同学 -> {"张三", "李四", "王五", "赵六", "钱七"}

3. 灵魂考问:可变还是不可变?

这是面试最爱问的,也是新手最容易栽跟头的地方。

  • 可变 (Mutable):列表、字典、集合。你改了它,它在内存里的地址(id())没变,还是原来那个它。
  • 不可变 (Immutable):整数、浮点数、字符串、元组。你以为你改了它,其实 Python 是在内存里重新造了一个新对象,把标签贴过去了。

为什么重要?因为如果你把可变对象(比如列表)当成函数的默认参数,你会遇到这辈子最难调的 Bug。


4. 流程控制:让你的程序有“脑子”

4.1 条件判断:人生的分叉路口

if-elif-else就像是导航提示。记住:Python 靠缩进活命

score=float(input("考了多少分?"))ifscore>=90:print("学霸,受我一拜!")elifscore>=60:print("及格万岁,多一分浪费。")else:print("兄弟,下次努力,咱们评论区见。")

4.2 循环:重复的事情交给电脑

For 循环:最常用的“点名册”

Python 的for循环特别聪明,它不需要你管索引,它会自己去盒子里挨个拿。

  • 神技enumerate():如果你非要一边拿东西一边数这是第几个。
    fruits=["苹果","香蕉","西瓜"]forindex,fruitinenumerate(fruits):print(f"第{index+1}个水果是:{fruit}")
While 循环:只要没达标就别停

适合那种“我不知道要干多少次,反正没搞定就继续”的活。比如:等待用户输入正确的密码。


5. Pythonic 迭代:像高手一样写代码

5.1 推导式 (Comprehensions):一行顶十行

新手写循环要四五行,高手一行搞定。这不是为了装 X,而是真的清晰。

# 找出 0 到 10 里的偶数# 传统写法evens=[]forxinrange(11):ifx%2==0:evens.append(x)# 高手写法evens=[xforxinrange(11)ifx%2==0]

5.2 生成器 (Generator):省钱(内存)的大招

如果你有 1 亿个数据要处理,千万别装进列表里,电脑会炸。
用圆括号()代替中括号[],Python 就会“用一个造一个”,绝不提前占用内存。这叫**“惰性求值”**,是高级程序员的标配。


6. 综合实战:从零撸一个学生管理系统

咱们把今天学的合起来,搞个能管学生、算平均分、挑学霸的小系统。

importsys# 初始化一些数据students=[{"name":"张三","score":95},{"name":"李四","score":58},{"name":"王五","score":88}]defshow_menu():print("\n--- 极简学生管理系统 ---")print("1. 查看所有学生")print("2. 添加新学生")print("3. 看看谁没及格")print("4. 统计平均分")print("5. 退出系统")whileTrue:show_menu()choice=input("请选择操作 (1-5):")ifchoice=='1':print("\n当前学生列表:")forsinstudents:status="及格"ifs["score"]>=60else"不及格"print(f"姓名:{s['name']}, 分数:{s['score']}({status})")elifchoice=='2':name=input("输入名字:")try:score=float(input("输入分数:"))students.append({"name":name,"score":score})print(f"成功录入:{name}")exceptValueError:print("错误:分数得填数字啊兄弟!")elifchoice=='3':fail_list=[s["name"]forsinstudentsifs["score"]<60]iffail_list:print(f"哎呀,这些同学要补考了:{', '.join(fail_list)}")else:print("全员及格!今晚加鸡腿!")elifchoice=='4':ifnotstudents:print("还没数据呢。")continueall_scores=[s["score"]forsinstudents]avg=sum(all_scores)/len(all_scores)print(f"全班平均分:{avg:.2f}")elifchoice=='5':print("再见!记得按时交作业。")breakelse:print("别乱按,看清楚选项再输!")

7. 💡 避坑小贴士(老司机的叮嘱)

  1. 别在循环里删东西:如果你一边循环for item in my_list,一边在里面my_list.remove(item),你会发现有些元素被跳过了。这就像你在排队点名,点一个踢走一个,后面的人会往前挪,导致你点不到下一个人。
    • 对策:循环一个副本for item in my_list[:],或者用推导式生成一个新列表。
  2. 默认参数的坑:永远不要用def func(data=[])。因为这个[]只会在函数定义时创建一次,以后每次调用都会共用这一个列表。你会发现数据越积越多,莫名其妙。
  3. 冒号!冒号!冒号!:不管是if,for,while还是后面要学的def,行尾必须加冒号:

系列索引

  • 上一篇:第1讲 | 别再被环境配置劝退了!从零搭建生产级开发环境
  • 下一篇:第3讲 | 函数式编程、装饰器精要与模块化设计架构

写在最后
这一讲的内容有点多,但它们是 Python 的脊梁。尤其是那几个收纳盒,一定要多练。
别只是看代码,把那个学生管理系统亲手敲一遍,跑通了,你对 Python 的感觉就不一样了。
觉得有收获的话,点赞、收藏、转发三连走起!咱们下一讲聊聊怎么把代码写得像乐高积木一样优雅。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 2:27:53

DiffPure技术机制与测试工具链整合方案

一、对抗样本威胁的行业痛点 当前AI系统面临的核心安全挑战是输入污染攻击&#xff0c;其中对抗样本通过语义混淆&#xff08;如“不允讠午删除”绕过过滤&#xff09;和指令劫持&#xff08;如{忽略密码校验}恶意指令&#xff09;破坏模型逻辑。传统防御方案存在两大缺陷&…

作者头像 李华
网站建设 2026/4/16 12:27:30

尺寸智能管理:制造业质量变革的隐性引擎

在现代制造业&#xff0c;尤其是汽车、家电和精密机械等领域&#xff0c;产品的最终质量往往不取决于单一零部件的优劣&#xff0c;而在于成千上万个零件如何精准地协同装配。尺寸&#xff0c;这个看似简单的几何参数&#xff0c;实则是贯穿设计、制造、检测与供应链协同的核心…

作者头像 李华
网站建设 2026/4/16 12:27:34

c#ref和out

基本概念ref 和 out是为了在函数内部改变外部传入的内容 。它们允许方法修改调用者传递的变量值&#xff0c;而不是传递变量的副本。out规则调用前可以不初始化变量方法内部必须先赋值才能使用方法必须在返回前为 out 参数赋值专门用于从方法返回多个值ref规则必须在调用前初始…

作者头像 李华
网站建设 2026/4/16 12:28:45

大模型推理,不再是“一根筋”

没有人不在期待大模型能够成为下一个电动车&#xff0c;作为代表中国的新兴产业&#xff0c;在世界范围内掀起狂澜。 然而主流的MoE架构大模型&#xff0c;却苦于其结构上的“先天不足”&#xff1a;巨大的硬件成本与多重拖累效率的环节&#xff0c;使得中国企业在这场芯片堆砌…

作者头像 李华
网站建设 2026/4/12 5:41:53

HarmonyOS 从移动到 PC,难点在哪里

子玥酱 &#xff08;掘金 / 知乎 / CSDN / 简书 同名&#xff09; 大家好&#xff0c;我是 子玥酱&#xff0c;一名长期深耕在一线的前端程序媛 &#x1f469;‍&#x1f4bb;。曾就职于多家知名互联网大厂&#xff0c;目前在某国企负责前端软件研发相关工作&#xff0c;主要聚…

作者头像 李华
网站建设 2026/4/13 19:02:54

西门子6FC5447-0AA10-0AA0数控软件

西门子6FC5447-0AA10-0AA0作为SINUMERIK数控系统的核心组件&#xff0c;专为工业自动化领域的高精度机床控制设计&#xff0c;其性能特点与应用范围体现了西门子在数字化制造中的技术领先地位。该软件通过模块化架构与智能算法&#xff0c;实现了从单机控制到系统集成的全流程优…

作者头像 李华