摘要:# ✅ 遍历列表fruits = ["苹果", "香蕉", "橙子"]for fruit in fruits: # 此处将逐个从fruits列表中取出水果名称,并格式化输出 print(f"我爱吃{fruit}")# ✅ 遍历字典person = {"name
对话实录
小白:(抓狂)我写了for i in range(5): print(i),为什么只打印到 4?
专家:(推眼镜)range (n) 生成 0 到 n - 1 的序列!想包含 5?用range(6)!
循环基础双雄会 1. for 循环:精确制导
# ✅ 遍历列表fruits = ["苹果", "香蕉", "橙子"]for fruit in fruits: # 此处将逐个从fruits列表中取出水果名称,并格式化输出 print(f"我爱吃{fruit}")# ✅ 遍历字典person = {"name": "小明", "age": 18}for key in person: # 遍历字典时,默认遍历的是键,通过键可以获取对应的值并输出 print(f"{key}: {person[key]}")# 进阶技巧for i, fruit in enumerate(fruits, 1): # 这里的1表示从1开始计数 # 输出带有水果序号的信息,方便展示水果在列表中的位置 print(f"第{i}个水果是{fruit}")for 循环像传送带,逐个处理元素。就如同工厂的流水线上,物品依次被输送到工人面前进行加工,在 Python 中,for循环按顺序依次取出可迭代对象(如列表、字典等)中的元素进行处理。
2. while 循环:条件为王
# ✅ 基础用法count = 0while countwhile 循环像哨兵,条件不满足就下岗。哨兵会时刻坚守岗位,不断检查指定的条件,只有当条件不满足时,哨兵才会 “下岗”,即循环结束。
六大必杀技 1. range 三兄弟
range(5) # 生成从0开始,到4结束的整数序列,即0, 1, 2, 3, 4 range(1, 5) # 生成从1开始,到4结束的整数序列,即1, 2, 3, 4 range(1, 10, 2) # 生成从1开始,到9结束,步长为2的整数序列,即1, 3, 5, 7, 9range函数在循环中应用广泛,可精确控制循环次数和元素取值范围。
2. 循环控制双雄
# break:直接结束循环for num in range(10): if num == 5: break # 当num的值等于5时,立即终止整个for循环 print(num) # 循环从0开始,到4结束,输出0, 1, 2, 3, 4# continue:跳过本次循环for num in range(10): if num % 2 == 0: continue # 当num是偶数时,跳过本次循环后续的代码,直接进入下一次循环 print(num) # 输出1, 3, 5, 7, 9,所有偶数都被跳过break和continue语句在循环中用于灵活控制循环流程,可根据特定条件提前结束循环或跳过某些迭代。
3. 列表推导式
# 传统写法squares = for x in range(5): squares.append(x ** 2) # 逐个计算x的平方,并添加到squares列表中# 推导式写法squares = [x ** 2 for x in range(5)] # 一行代码实现相同功能,结果为[0, 1, 4, 9, 16],代码更加简洁高效列表推导式是 Python 的特色语法,可在一行内创建列表,通过简洁的表达式对可迭代对象进行处理并生成新列表。
高阶实战场景 1. 并行遍历 - zip
names = ["小明", "小红"]scores = [90, 95]for name, score in zip(names, scores): # zip函数将两个列表对应位置的元素打包成元组,然后同时遍历 # 输出每个人对应的姓名和分数,方便进行关联数据的处理 print(f"{name}考了{score}分")在数据分析、机器学习等领域,经常需要同时处理多个相关的数据集,zip函数可实现并行遍历,简化代码逻辑。
2. 字典推导式
words = ["apple", "banana"]length_dict = {word: len(word) for word in words} # 生成一个字典,键为单词,值为单词的长度,结果为{'apple': 5, 'banana': 6}字典推导式可快速生成字典,适用于将一种数据结构转换为字典形式,或根据已有数据生成特定格式的字典。
3. 生成器省内存
# 列表立即占用内存nums_list = [x for x in range(1000000)] # 一次性生成包含100万个元素的列表,会立即占用大量内存,可能导致内存爆炸# 生成器按需生成nums_gen = (x for x in range(1000000)) # 生成器不会立即生成所有元素,而是在需要时逐个生成,内存占用非常友好在处理海量数据时,生成器的优势尤为明显,可避免因数据量过大导致的内存不足问题。
六大血泪陷阱 修改迭代中的列表
# 错误示范numbers = [1, 2, 3, 4]for num in numbers: if num % 2 == 0: numbers.remove(num) # 当从列表中删除元素时,列表的索引会发生变化,可能导致跳过某些元素,实际输出[1, 3],而不是预期的[1]# 正确做法numbers = [x for x in numbers if x % 2!= 0] # 使用列表推导式安全过滤,结果为[1]在迭代列表时直接修改列表是危险的,容易导致逻辑错误,应尽量使用推导式等安全方式进行处理。
死循环陷阱
# 错误示范count = 0while count使用while循环时,务必确保条件变量会在循环过程中被更新,以避免死循环。
变量覆盖
for i in range(3): print(i) # 循环内,i依次被赋值为0, 1, 2并输出print(i) # 循环结束后,i的值会保留最后一次迭代的值,即2在循环外部访问循环内部使用的变量时,需注意变量的值可能是循环结束时的最后一个值,避免因变量覆盖导致的逻辑错误。
专家终极指南
能用 for 不用 while:for循环在遍历可迭代对象时更加简洁、安全,无需手动维护循环变量,出错概率更低。例如,在遍历列表元素时,for循环的语法更直观。循环嵌套不超过 3 层:循环嵌套超过 3 层会使代码的可读性和维护性急剧下降。复杂的逻辑应尽量通过函数封装或其他数据结构来实现,以保持代码的清晰。海量数据用生成器:当处理大规模数据时,生成器可按需生成数据,避免一次性将大量数据加载到内存中,有效防止内存溢出问题,提升程序的稳定性和性能。修改数据用推导式:列表推导式和字典推导式能更安全、高效地对数据进行过滤和转换。相比在循环中直接修改原数据,推导式会创建新的数据结构,避免了对原数据的直接修改带来的潜在问题。小白:(跪了)原来循环有这么多门道!
专家:(递上咖啡)记住:循环不是越复杂越好,合适最重要!
来源:展鹏教育