python基本知识--for、while两类循环
目录for循环for-eachrange函数range与列表常用特性enumerate函数并行遍历序列-zip()基本用法-元素配对配对语法例1·列表配对例2·列表配对zip()的截断itertools.zip_longestfor...else...map()函数例1·单序列应用例2·多序列应用遍历字符串与可常见迭代对象迭代器基础iter(对象)next(迭代器)手动迭代while循环while循环语法Java/Python对照表结束循环条件条件收尾flag(多事件退出最清晰)break手动退出continue 跳过回开头while与列表for循环不适用于列表例1·列表搬元素例2·循环删除指定元素例3·综合列表/字典while:条件/标志/break本文系统讲解Python循环结构涵盖for循环、while循环及其控制语句break、continue重点介绍range()、enumerate()、zip()、map()等函数的用法与特性。通过实例演示列表遍历、并行处理、索引获取、迭代器机制及常见应用场景强调for循环不适用于边遍历边修改列表推荐使用while循环实现动态操作。内容结合Java对比深入浅出适合掌握循环逻辑与高效编程技巧。for循环for-each基本语法for 变量 in 可迭代对象: 循环体range函数语法range(stop) range(start, stop) range(start, stop, step)start起始值默认是0stop结束值不包含step步长默认是1本函数自stop开始到stop-1结束默认步长for i in range(0,20): #range(0,20)等价于range(20) print(i,end ) #0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19等价于Javapublic class Main { public static void main(String[] args) { for(int i 0; i 20; i) { System.out.print(i ); } } }步长step等于2for i in range(0,20,2): print(i,end )等价于javapublic class Main { public static void main(String[] args) { for(int i 0; i 20; i2) { System.out.print(i ); } } }倒叙打印for i in range(10,0,-1): print(i,end )等价于Javapublic class Main { public static void main(String[] args) { for(int i 10; i 0; i--) { System.out.print(i ); } } }range与列表List range(30) for i in List: print(i,end )常用特性r range(10) print(len(r)) # 10 print(3 in r) # True print(10 in r) # False print(r[2]) # 2 print(r[2:5]) # range(2, 5) print(list(r[2:5])) # [2, 3, 4]enumerate函数本函数专门解决 Python 的 for 不给索引 这个痛点替代for i in range(len(...))如for i, name in enumerate(names): # ← 一个函数同时解出 i 和 name语法enumerate(iterable, start)iterable任何可迭代对象如列表、元组、字符串、字典、文件等。start索引起始值默认0。返回一个enumerate 对象是迭代器不是列表。K [汤,伊尹,盘庚,妇好,武丁] for i in range(len(K)): print(K[i]) for t,name in enumerate(K): print(f第{t1}位商朝代表{name})enumerate(K) 每次产出一个元组(0, apple)(1, banana)(2, cherry)在for里u和name就对其解包对比range(len(List))和enumerateK [汤,伊尹,盘庚,妇好,武丁] for i in range(len(K)): print(f第{i1}位商朝代表{K[i]}) print() for t,name in enumerate(K): print(f第{t1}位商朝代表{name})写法说明range(len(lst))先取长度再按索引访问容易越界、可读性差enumerate(lst)直接同时得到索引和值更 Pythonic补充zip() 并行遍历、for...else、map()、嵌套循环的控制范围以及理解 for 循环本质所需的迭代器基础并行遍历序列-zip()目前的 for 一次只能遍历一个序列。zip() 可以把多个序列“对应位置”的元素配对打包成元组从而 实现并行遍历——这在处理“两个列表一一对应”时极常用。基本用法-元素配对配对语法for lst1,lst2,...lst in zip(list1,list2,...list): print(f{lst1},{lst2},...,{lst})例1·列表配对lst1 [秦,楚,燕,赵,韩,魏,齐] lst2 [秦孝公,楚灵王,燕昭王,赵武灵王,韩昭王,魏文侯,齐威王] for country,name in zip(lst1,lst2): print(f{country}:{name})例2·列表配对names [张三, 李四, 王五] scores [80, 95, 70] # zip 把对应元素配对(张三,80) (李四,95) (王五,70) for name, score in zip(names, scores): print(f{name} 考了 {score} 分)zip 出来的每个元素是元组用几个变量就解包几个。zip()的截断当zip()内的各列表长度不一致时截断到最短的那个lst1,lst2,lst3 [],[],[] for num1 in range(1000): lst1.append(num1) for num2 in range(100): lst2.append(num2) for num3 in range(10): lst3.append(num3) for lt1,lt2,lt3 in zip(lst1,lst2,lst3): print(f{lt1}:{lt2}:{lt3})zip 默认“按最短截断”。如果希望按最长的序列对齐、缺的位置填默认值用 itertools.zip_longestitertools.zip_longest需要用到的模块import itertoolsimport itertools lst1,lst2,lst3 [],[],[] for num1 in range(1000): lst1.append(num1) for num2 in range(100): lst2.append(num2) for num3 in range(10): lst3.append(num3) for lt1,lt2,lt3 in itertools.zip_longest(lst1,lst2,lst3): print(f{lt1}:{lt2}:{lt3})小技巧想同时得到“序号 两个序列的值”可以把 enumerate 和 zip 组合for i, (a, b) in enumerate(zip(x, y)): ...for...else...Python 的 for和 while可以带一个 else但它的含义和 if-else 完全不同•循环正常跑完没有被 break 打断 → 执行 else 里的代码•循环中途被 break 打断→ 不执行 else。#判断一个数是否为素数 n 17 for i in range(2, n): if n % i 0: # 能被整除 → 不是素数 print(n, 是合数) break # 找到因子中断循环else 不执行 else: print(n, 是素数) # 没被 break说明没找到因子map()函数1.map()是 Python 内置函数用来对可迭代对象中的每个元素应用同一个函数并返回一个迭代器2.map(函数, 序列)会把函数依次作用到序列的每个元素上把结果收集起来返回。它是“对一批数据 做同一种变换”的简洁写法map(function, iterable, ...)function要应用的函数iterable一个或多个可迭代对象返回map对象迭代器不是列表例1·单序列应用有列表用map()求其长度、取绝对值#集中求长度 print(list(map(len,[takes exactly one argument,line 7, in module])))#[26, 19] #集中求绝对值 print(list(map(abs,[-324435,-56,-114514,1000])))#[324435, 56, 114514, 1000]例2·多序列应用lst1 [1,2,3,4,5,6,100] lst2 [-1,-2,-3,-4,-5,-6,-100] lst3 [55,44,33,22,11] lst4 [何,文,傻] lst5 [金,大,福] print(list(map(lambda x,y,z:x*yz,lst1,lst2,lst3)))#[54, 40, 24, 6, -14] print(list(map(lambda x,y,z:x**abs(y)//z,lst1,lst2,lst3)))#[0, 0, 0, 11, 284] print(*list(map(lambda a,b:ab,lst4,lst5)))#何金 文大 傻福map 返回的是“迭代器”惰性、不立即占内存所以想看内容要包一层 list()。实际上同样的事用列表推导式[len(x) for x in ...] 更直观、更 Pythonicmap 了解即可看到别人代码能读懂。以上lambda表达式的内容可以通过for循环列表推导式zip()实现print(list((x*yz for x,y,z in zip(lst1,lst2,lst3))))#[54, 40, 24, 6, -14] print(list(x**abs(y)//z for x,y,z in zip(lst1,lst2,lst3)))#[0, 0, 0, 11, 284] print(*list((xy for x,y in zip(lst4,lst5))))#何金 文大 傻福必须加上 list否则generator object genexpr at 0x000002C1DCD31210print(((x*yz for x,y,z in zip(lst1,lst2,lst3)))) print((x**abs(y)//z for x,y,z in zip(lst1,lst2,lst3))) print(((xy for x,y in zip(lst4,lst5)))) generator object genexpr at 0x000002C1DCD31210 generator object genexpr at 0x000002C1DCD31210 generator object genexpr at 0x000002C1DCCF0AC0遍历字符串与可常见迭代对象for 能遍历的不只是列表。凡是“能依次取出元素”的对象都可以直接 for#1. 遍历字符串逐个字符 for ch in abc: print(ch) # a b c # 2. 遍历字典默认遍历键 d {a: 1, b: 2} for key in d: print(key, d[key]) # 3. 遍历集合顺序不保证 for x in {3, 1, 2}: print(x) # 4. 遍历文件逐行大文件也省内存 # with open(a.txt) as f: # for line in f: # print(line.rstrip())迭代器基础为什么 for 能遍历这么多对象背后有一个统一的“迭代协议”了解它能看懂很多高级写法。 两个关键内置函数iter(对象)向对象要一个“迭代器”负责逐个吐元素的助手next(迭代器)让迭代器吐出下一个元素没有元素时抛出 StopIteration。手动迭代我们写的 for 循环Python 内部其实自动做了这件事先 iter() 取迭代器再反复 next() 取值直到遇到 StopIteration 就结束。lst [10, 20, 30] it iter(lst) # 取得迭代器 print(next(it)) # 10 print(next(it)) # 20 print(next(it)) # 30 # next(it) # 再取会报 StopIteration#下面的 for for x in [1, 2, 3]: print(x) # 本质等价于这个手动过程 it iter([1, 2, 3]) while True: try: x next(it) except StopIteration: break print(x)range、enumerate、zip、map 返回的都不是列表而是这种“迭代器/可迭代对象”——它们不一次 性占内存而是用的时候才生成下一个值。这也是 Python 处理海量数据如几百万条评论时省内存的关键while循环while循环语法while 条件:代码块i 0 while i 10: print(i) i 1#终止条件循环10次后i10不满足-False退出while无本行则死循环 0 1 2 3 4 5 6 7 8 9执行过程判断i 5如果为True执行循环体执行完后再判断一次直到条件为False循环结束Java/Python对照表特性C/JavaPythonwhilewhile (x 5)while x 5:括号可省冒号收尾break一样一样continue一样一样do-while有没有要么 while 前置要么 while True break结束循环条件条件收尾message while message ! quit:#当messgae quit时退出循环 message input(输入)flag(多事件退出最清晰)active True while active: msg input(若输入“quit”则本循环结束) if msg quit:#判断,当msg quit时执行下条语句 active False #active由True更新为False转回while active等价于while 0为假循环结束 else: print(msg)关于flagflag适用多条件退出条件过多会导致代码臃肿可读性降低作用“充当交通信号灯”和 break 相比flag 退出后还能 善后执行break后break后面的代码都不会执行breakflag退出方式当场跳走我自己要走了只改状态我把灯关了退出后直接到循环后面也是到循环后面适用就一个退出点就地走人多个退出点或退出原因要在循环外判断典型while True 用户输 quit游戏主循环、菜单系统、事件驱动running True # flag while running: print(1. 看评论 2. 发评论 3. 退出) choice input(请选择) if choice 1: show_comments() # 执行功能但不关灯 elif choice 2: post_comment() elif choice 3: running False # 只有选退出才关灯break手动退出while True: city input(城市(quit结束) ) if city quit: breakcontinue 跳过回开头n 0 while n 10: n 1 if n % 2 0: continue print(n) # 1 3 5 7 9while与列表for循环不适用于列表不应该在 for 循环中修改列表——for 遍历时改列表会让 Python 数不清元素。要边遍历边改就用 while。典例sandwich_orders [三明治A,三明治B,三明治C,三明治D,pastrami,pastrami,pastrami,pastrami,pastrami] finished_sandwiches [] for sandwich in sandwich_orders: if pastrami in sandwich_orders: sandwich_orders.remove(pastrami) print(fI made your {sandwich}.) finished_sandwiches.append(sandwich)例1·列表搬元素lst1 [a,b,c,d,e,f] lst2 [] while lst1:#当lst1 []时等价于while 0 lst2.append(lst1.pop(-1)) print(lst1) print(flst2 {lst2}) lst2.sort() print(flst2 {lst2}) print(-----------------------------------------) Lst1 [a,b,c,d,e,f] Lst2 [] while Lst1: Lst2.append(Lst1.pop(0)) print(Lst1) print(fLst2 {Lst2})例2·循环删除指定元素# 删除所有特定值 pets [cat, dog, mouse,tiger] while cat in pets: pets.remove(cat) print(pets)#[dog, mouse, tiger]例3·综合列表/字典# 用户输入填充字典小型调查系统 responses {} active True while active: name input(名字) ans input(回答) responses[name] ans # 字典收集 if input(继续(yes/no)) no: active False for n, a in responses.items(): # 结束统一展示 print(f{n}: {a})while:条件/标志/break# ① 条件收尾输入 quit 停 message while message ! quit: message input(prompt) # ② 标志 flag多事件退出最清晰 active True while active: msg input(prompt) if msg quit: active False else: print(msg) # ③ break 立即退出while True break 手动喊停 while True: city input(城市(quit结束) ) if city quit: break # continue跳过本次回开头打印奇数 n 0 while n 10: n 1 if n % 2 0: continue print(n) # 1 3 5 7 9

相关新闻

Matern硬核点过程:用R语言模拟空间排斥格局的实战指南

Matern硬核点过程:用R语言模拟空间排斥格局的实战指南

如果你盯着一片成熟林地的树冠投影看,会发现一个耐人寻味的规律:大树之间很少贴着长,树干与树干之间的距离好像有一条看不见的下限。这种“最小间距”约束下的空间分散模式,正是 Matern硬核点过程(Matern hard core po…

2026/10/13 10:30:09 阅读更多 →
多代理系统落地实践:角色分工、权限控制与知识库搭建

多代理系统落地实践:角色分工、权限控制与知识库搭建

把一个通用智能体直接丢给业务方用,大概率会翻车。这东西我们团队试过不止一次,要么答非所问,要么权限混乱碰到什么信什么,要么上下文拖到几千行之后生成质量肉眼可见地崩坏。痛定思痛,我们才把单体智能体彻底拆掉&…

2026/10/13 10:30:09 阅读更多 →
RP2040嵌入式游戏机实战:用本地自适应AI打造掌上游戏系统

RP2040嵌入式游戏机实战:用本地自适应AI打造掌上游戏系统

1. 概念拆解:为什么要做一台“握在手里的游戏机”ARDU-cade 这个项目,核心就一句话:把所有游戏机的硬件——主控、屏幕、按键、扬声器、电源——全塞进一个手柄外壳里,不在桌面上摆一台主机,而是让手掌本身成为整个游戏…

2026/10/13 10:30:09 阅读更多 →

最新新闻

论文查重免费平台实测:每天200篇额度如何让降重成本归零

论文查重免费平台实测:每天200篇额度如何让降重成本归零

又是一年毕业季,朋友圈里满是“查重又要花钱”“学校只给一次免费查重机会”的哀嚎。我自己去年帮课题组改论文,前前后后用第三方付费查重花了小几百,后来偶然发现一个每天能免费用 200 篇的查重平台,一开始以为是噱头&#xff0c…

2026/10/13 11:20:38 阅读更多 →
基于边缘形状匹配的拼图求解器:OpenCV轮廓提取与全局优化实战

基于边缘形状匹配的拼图求解器:OpenCV轮廓提取与全局优化实战

简介:这是一份面向计算机视觉与算法实践者的C拼图求解项目源码,核心思路是通过提取拼图碎片的边缘形状特征完成自动拼接,适合具备一定OpenCV基础、希望研究图像分割与轮廓匹配的开发者参考。资源包共53个文件,约239.07MB&#xff…

2026/10/13 11:20:38 阅读更多 →
Java反射机制从原理到实战:动态加载、框架应用与性能优化全解析

Java反射机制从原理到实战:动态加载、框架应用与性能优化全解析

Java反射是我认为Java语言里最容易被误解的一个机制。很多人知道它能动态获取类信息,但真要说清楚它底层怎么跑的、为什么框架离了它没法活、什么时候该用什么时候不该用,能讲明白的人其实不多。我早年在做服务端开发时,遇到过一个需求&#…

2026/10/13 11:20:38 阅读更多 →
在线期末考试主观卷作答指南:从准备到提交的实战策略

在线期末考试主观卷作答指南:从准备到提交的实战策略

1. 从“在线期末主观卷”这个场景说起如果你在高校里待过,或者正在经历线上课程的学习,大概率对“在线期末考试”这六个字不会陌生。尤其是主观卷部分——它不像选择题那样有标准答案可以自动判分,也不像填空题那样有明确的字符串匹配逻辑。主…

2026/10/13 11:20:38 阅读更多 →
mPaaS iOS中defaultTitle与readTitle标题同步原理与自定义导航适配

mPaaS iOS中defaultTitle与readTitle标题同步原理与自定义导航适配

1. 为什么这个看似简单的参数问题,会让iOS团队连续加班三天?“pushWindow的defaultTitle和readTitle到底谁在起作用?”——这是上周五下午四点,某公司iOS组组长在内部技术群抛出的问题。紧接着,群里刷出十几条消息&…

2026/10/13 11:20:38 阅读更多 →
IPS入侵防护系统实战指南:精准防御与零误杀部署

IPS入侵防护系统实战指南:精准防御与零误杀部署

1. 项目概述:这不是防火墙的“加强版”,而是网络边界的“主动哨兵” 很多人第一次听说IPS(Intrusion Prevention System,入侵防护系统),下意识会把它当成“更高级的防火墙”——能拦流量、能设规则、还能看…

2026/10/13 11:19:38 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →