Python碎片日记17——while循环、for循环、range、zip、enumerate

本文介绍了Python中的循环结构,包括while循环的使用,强调了else语句和break、continue的作用。接着讨论了for循环的特点,如自动解包和效率问题。range()函数生成连续整数序列,适用于for循环遍历。zip()函数用于并行遍历多个序列,而enumerate()则提供在迭代中同时获取值和索引的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

while循环

while ...:
        ...
else:
        ...

while后的表达式不允许有赋值语句(Python中的表达式都如此)。
当while的循环运行完(无中断)会进入else语句。
没有do until语句。
可以用pass或…代替空白代码(三个点还可以用来初始化)。
break和continue可以用来中断和跳到下次循环。

for循环

for ... in ...:
        ...
else:
        ...

else、break、continue作用同上。
for后面的变量会自动解包,哪怕是嵌套的序列结构(有点和序列赋值的解包类似):

for ((a,b),c) in [([1,2],3), ['xy',6]]:print(a,b,c) 
#1 2 3
#x y 6
for a,*b, c in [(1,2,3,4), (2,3,4,5)]:print(a,b,c)
# 1,[2,3],4
# 2,[3,4],5

通常情况下,while()会比for()慢(因为需要更多输入)。

range

range()返回一系列连续增加的整数(左闭右开),可用于在for中内遍历数个序列。
产生对象可迭代,不可直接显示。
步进为x的遍历方法:

# 方法一:使用带步长的range方法:
for i in range(0, len(L), x):...
# 方法二:使用分片:
for i in L[::x]:...

只支持迭代、索引和len函数:

R = range(1,6)
len(R) #len函数
R[3]#正索引
R[-1] # 负索引
# 迭代:
I = iter(R)
next(I)

zip

zip()返回并行元素的元组对,可用于在for中内遍历数个序列。
只要可迭代就可以用zip,产生对象可迭代。
可以多个序列,配对到最短的序列的最后一个。

zip(L1,L2)#将两个序列元素配对
for (x,y) in zip(L1,L2):...

便于生成字典:

dict(zip(keys,vals))

enumerate

在迭代中,有时既需要迭代值,又需要知道是对应的第几次迭代,可以用此函数实现。
返回一个生成器对象(可迭代的)。

for (index, item) in enumerate(L):...
[c*i for (i,c) in enumerate(L)]

与next()配合:

S = 'spam'
E = enumerate(S) #E是一个enumerate对象
next(E) # 返回index,item对,(0,'s')
next(E) # (1,'p')
...
<think>好的,我现在需要回答用户关于Pythonwhilefor循环的注意事项及编写格式的问题。首先,我得回忆一下这两种循环的基本结构和使用场景,然后整理出常见的注意事项。 首先,while循环是当条件满足时重复执行代码块,而for循环通常用于遍历可迭代对象。需要注意的地方可能包括循环条件的更新、避免无限循环循环变量的处理等。用户可能想知道如何正确使用它们,避免常见错误。 接下来,编写格式方面,Python依靠缩进来区分代码块,所以缩进必须正确。比如循环体内部的代码要统一缩进四个空格。另外,循环后的else子句可能是一个需要注意的点,很多初学者可能不太熟悉这个用法。 然后,注意事项部分,比如在while循环中要确保条件最终会变为False,否则会导致无限循环。对于for循环,如果在循环体内修改正在迭代的列表,可能会导致意外结果,这时候可能需要遍历副本或者改用其他方式处理。 可能还需要提到循环控制语句,如break、continue和pass的使用。比如break会跳出整个循环,而continue跳过当前迭代。pass则是一个占位符,不执行任何操作。 另外,性能方面的考虑,比如在循环中避免不必要的计算,或者使用更高效的迭代方式,比如用range代替直接操作索引。在遍历大列表时,生成器或者列表推导式可能更高效。 还要考虑到异常处理,比如在循环中处理可能的错误,避免程序崩溃。例如,在遍历文件或网络资源时,可能需要try-except块来捕获异常。 最后,可能需要举一些例子来说明正确的格式和常见的错误案例,帮助用户理解。例如,展示一个无限循环while循环,以及如何修复它;或者展示在for循环中修改列表导致的问题。 总结一下,我需要分点整理whilefor循环各自的注意事项和编写格式,确保覆盖语法、常见错误、控制语句、性能优化等方面,同时用例子来辅助说明,让回答更清晰易懂。</think>以下是Pythonwhilefor循环的编写规范与注意事项(所有数学表达式均遵循LaTeX格式): $\textcircled{1} \textbf{while循环格式}$ ```python while 条件表达式: 循环体代码 else: 条件不满足时执行代码 ``` $\textcircled{2} \textbf{for循环格式}$ ```python for 变量 in 可迭代对象: 循环体代码 else: 循环正常结束后执行代码 ``` $\blacktriangleright$ \textbf{通用注意事项}: 1. \textbf{缩进规则}:循环体必须使用4个空格缩进(PEP8规范),例如: ```python for i in range(3): print(i) # ✔️ 正确缩进 print("错误") # ❌ 缩进不一致 ``` 2. \textbf{循环终止条件}: - while循环需保证条件最终变为$\text{False}$,避免死循环 - for循环遍历耗尽时自动终止 $\blacktriangleright$ \textbf{while循环专项注意}: 1. \textbf{计数器更新}必须显式操作: ```python count = 0 while count < 5: # 初始条件 print(count) count += 1 # ✔️ 必须手动更新 ``` 2. \textbf{避免无限循环}案例: ```python # ❌ 危险示例 while True: if not data: break # 必须设置有效的退出条件 ``` $\blacktriangleright$ \textbf{for循环专项注意}: 1. \textbf{遍历时修改原集合}可能导致意外结果: ```python lst = [1,2,3] for x in lst: if x == 2: lst.remove(x) # ❌ 遍历时修改原列表 ``` 2. 推荐遍历副本或使用列表推导式: ```python for x in lst.copy(): # ✔️ 安全方式 if x == 2: lst.remove(x) ``` $\blacktriangleright$ \textbf{控制语句使用规范}: 1. \textbf{break}立即终止整个循环 2. \textbf{continue}跳过当前迭代 3. \textbf{else子句}仅在循环正常完成时执行(非break退出) $\boxed{\textbf{最佳实践}}$: - 优先使用for循环处理已知迭代次数的情况 - while循环适用于不确定次数的条件驱动场景 - 复杂逻辑可配合`enumerate()`或`zip()`使用: ```python for index, value in enumerate(['a','b','c']): print(f"索引{index}: 值{value}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值