- Published on
2.19.for循环
- Authors

- Name
- xiaobai
.for 循环是什么?
for 循环 用于遍历可迭代对象中的每个元素,并对每个元素执行相同的代码块。
- 遍历:逐个访问集合中的每个元素
- 可迭代对象:包含一系列元素的对象,如列表、元组、字符串、字典、集合等
- 自动化:避免手动编写重复代码来访问每个元素
基本思想:"对于集合中的每一个元素,执行某些操作"
2.基本语法
for 变量 in 可迭代对象:
# 循环体 - 对每个元素执行的代码
# 需要缩进(通常是4个空格)
3.遍历各种数据类型
3.1.遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(f"I like {fruit}")
# 输出:
# I like apple
# I like banana
# I like cherry
3.2.遍历元组
numbers = (1, 2, 3, 4, 5)
for num in numbers:
print(f"Number: {num}")
# 输出:
# Number: 1
# Number: 2
# Number: 3
# Number: 4
# Number: 5
3.3.遍历字符串
text = "Hello"
for char in text:
print(char)
# 输出:
# H
# e
# l
# l
# o
3.4.遍历集合
unique_numbers = {1, 3, 5, 7, 9}
for num in unique_numbers:
print(num)
# 输出顺序可能不同(因为集合无序):
# 1
# 3
# 5
# 7
# 9
3.5.遍历字典
字典有几种遍历方式:
person = {"name": "Alice", "age": 30, "city": "Beijing"}
# 遍历所有键(默认方式)
for key in person:
print(f"Key: {key}")
# 遍历所有值
for value in person.values():
print(f"Value: {value}")
# 遍历所有键值对
for key, value in person.items():
print(f"{key}: {value}")
# 输出:
# name: Alice
# age: 30
# city: Beijing
4.range() 函数
range() 用于生成数字序列,常与 for 循环配合使用。
4.1.基本用法
# range(stop) - 从0到stop-1
for i in range(5):
print(i)
# 输出:0 1 2 3 4
# range(start, stop) - 从start到stop-1
for i in range(2, 6):
print(i)
# 输出:2 3 4 5
# range(start, stop, step) - 从start到stop-1,步长为step
for i in range(0, 10, 2):
print(i)
# 输出:0 2 4 6 8
# 反向
for i in range(5, 0, -1):
print(i)
# 输出:5 4 3 2 1
4.2.实际应用
# 计算1到100的和
total = 0
for i in range(1, 101):
total += i
print(f"1到100的和是: {total}") # 5050
# 生成索引序列
fruits = ["apple", "banana", "cherry"]
for i in range(len(fruits)):
print(f"索引 {i}: {fruits[i]}")
# 输出:
# 索引 0: apple
# 索引 1: banana
# 索引 2: cherry
5.enumerate() 函数
enumerate() 可以同时获取元素的索引和值,比 range(len()) 更优雅。
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"第{index}个水果是: {fruit}")
# 输出:
# 第0个水果是: apple
# 第1个水果是: banana
# 第2个水果是: cherry
# 可以指定起始索引
for index, fruit in enumerate(fruits, start=1):
print(f"第{index}个水果是: {fruit}")
# 输出:
# 第1个水果是: apple
# 第2个水果是: banana
# 第3个水果是: cherry
6.循环控制语句
6.1.break
完全终止循环
# 找到第一个大于10的数字就停止
numbers = [2, 5, 8, 12, 7, 15, 3]
for num in numbers:
if num > 10:
print(f"找到第一个大于10的数字: {num}")
break
print(f"检查: {num}")
# 输出:
# 检查: 2
# 检查: 5
# 检查: 8
# 找到第一个大于10的数字: 12
6.2.continue
跳过当前迭代,继续下一次
# 只打印奇数
for i in range(10):
if i % 2 == 0: # 如果是偶数
continue # 跳过这次循环
print(i)
# 输出:1 3 5 7 9
6.3.else
循环正常结束时的处理 else 在循环正常完成(没有被 break 中断)时执行。
# 在列表中查找元素
numbers = [1, 3, 5, 7, 9]
target = 4
for num in numbers:
if num == target:
print(f"找到了 {target}")
break
else:
# 如果循环完整执行完毕(没有break),则执行这里
print(f"没有找到 {target}")
# 输出:没有找到 4
# 如果找存在的元素
target = 5
for num in numbers:
if num == target:
print(f"找到了 {target}")
break
else:
print(f"没有找到 {target}")
# 输出:找到了 5
7.嵌套循环
循环内部可以包含其他循环:
# 打印乘法表
for i in range(1, 4): # 外层循环
for j in range(1, 4): # 内层循环
print(f"{i} × {j} = {i * j}")
print("---") # 每组之间分隔
# 输出:
# 1 × 1 = 1
# 1 × 2 = 2
# 1 × 3 = 3
# ---
# 2 × 1 = 2
# 2 × 2 = 4
# 2 × 3 = 6
# ---
# 3 × 1 = 3
# 3 × 2 = 6
# 3 × 3 = 9
# ---
8.列表推导式
列表推导式提供了一种更简洁的创建列表的方式。
8.1.基本列表推导式
# 传统方式
squares = []
for x in range(5):
squares.append(x ** 2)
print(squares) # [0, 1, 4, 9, 16]
# 列表推导式(一行搞定)
squares = [x ** 2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]
8.2.带条件的列表推导式
# 只保留偶数
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(even_squares) # [0, 4, 16, 36, 64]
# 条件判断
numbers = [1, -2, 3, -4, 5]
positive = [x for x in numbers if x > 0]
print(positive) # [1, 3, 5]
9.以下内容不用看,Python全部学完后再看
10.实际应用案例
10.1.数据处理和统计
# 计算平均分数
scores = [85, 92, 78, 96, 88]
total = 0
for score in scores:
total += score
average = total / len(scores)
print(f"平均分: {average:.2f}") # 平均分: 87.80
# 找到最高分
max_score = scores[0]
for score in scores:
if score > max_score:
max_score = score
print(f"最高分: {max_score}") # 最高分: 96
10.2.文本处理
# 统计句子中的单词长度
sentence = "Python is a powerful programming language"
words = sentence.split()
word_lengths = {}
for word in words:
word_lengths[word] = len(word)
print(word_lengths)
# {'Python': 6, 'is': 2, 'a': 1, 'powerful': 8, 'programming': 11, 'language': 8}
10.3.文件处理
# 读取文件中的每一行(假设文件存在)
try:
with open("example.txt", "r") as file:
for line_num, line in enumerate(file, 1):
print(f"第{line_num}行: {line.strip()}")
except FileNotFoundError:
print("文件不存在")
11.常见陷阱和最佳实践
11.1.不要在循环中修改正在遍历的列表
# 错误示范
numbers = [2, 4, 6, 8]
for num in numbers:
if num % 2 == 0:
numbers.remove(num) # 危险!会跳过元素
print(numbers) # 实际输出 [4, 8],并非全部删除,6被跳过了
# 正确做法:创建副本或使用列表推导式
numbers = [2, 4, 6, 8]
numbers = [num for num in numbers if num % 2 != 0]
print(numbers) # [1, 3, 5]
11.2.使用有意义的变量名
# 不好的命名
l = [1, 2, 3]
for i in l:
print(i)
# 好的命名
students = ["Alice", "Bob", "Charlie"]
for student in students:
print(f"学生: {student}")
11.3.使用 zip() 同时遍历多个列表
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}的分数是: {score}")
# 输出:
# Alice的分数是: 85
# Bob的分数是: 92
# Charlie的分数是: 78
12.总结
| 概念 | 语法 | 用途 |
|---|---|---|
| 基本循环 | for item in collection: | 遍历集合中的每个元素 |
| 数字序列 | range(start, stop, step) | 生成数字序列用于循环 |
| 索引+元素 | enumerate(collection) | 同时获取索引和元素 |
| 提前退出 | break | 完全终止循环 |
| 跳过当前 | continue | 跳过本次迭代 |
| 循环完成 | else | 循环正常完成时执行 |
| 嵌套循环 | 循环内包含循环 | 处理多维数据 |
| 简洁创建 | 列表推导式 | 快速创建新列表 |
核心要点:
for循环用于遍历任何可迭代对象range()用于生成数字序列enumerate()用于同时获取索引和值break和continue控制循环流程- 列表推导式让代码更简洁

