Logo
Published on

2.19.for循环

Authors
  • avatar
    Name
    xiaobai
    Twitter

.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循环正常完成时执行
嵌套循环循环内包含循环处理多维数据
简洁创建列表推导式快速创建新列表

核心要点

  1. for 循环用于遍历任何可迭代对象
  2. range() 用于生成数字序列
  3. enumerate() 用于同时获取索引和值
  4. breakcontinue 控制循环流程
  5. 列表推导式让代码更简洁
img