Python 循环遍历完全指南

11 阅读11分钟

Python 循环遍历完全指南

目录

  1. 概述
  2. for 循环
  3. while 循环
  4. range() 函数详解
  5. 循环控制语句
  6. 循环遍历不同数据结构
  7. 嵌套循环
  8. 列表推导式
  9. 实用示例
  10. 性能优化建议

概述

循环是编程中最核心的概念之一,它允许我们重复执行代码块。Python提供了两种主要的循环结构:for循环和while循环。掌握循环的使用对于解决各种编程问题至关重要。

for 循环

基本语法

for 变量 in 序列:
    # 循环体
    pass

基本使用示例

1. 遍历数字范围
# 遍历 0 到 4
for i in range(5):
    print(i)
# 输出: 0, 1, 2, 3, 4

# 遍历 1 到 5
for i in range(1, 6):
    print(i)
# 输出: 1, 2, 3, 4, 5

# 步长为2的遍历
for i in range(0, 10, 2):
    print(i)
# 输出: 0, 2, 4, 6, 8
2. 计算累加和
# 初始化变量
a = 0

# 循环计算并打印结果
for i in range(101):  # 0到100
    a += i

print(f"求和a的值为:{a}")
# 输出: 求和a的值为:5050

多种求和方法对比

# 方法一:使用for循环累加
def sum_method1(n):
    total = 0
    for i in range(1, n + 1):
        total += i
    return total

# 方法二:等差数列公式(最高效)
def sum_method2(n):
    return n * (1 + n) // 2  # 使用整数除法

# 方法三:使用sum()和range()
def sum_method3(n):
    return sum(range(1, n + 1))

# 测试三种方法
n = 100
print(f"1到{n}的和为:{sum_method1(n)}")  # 输出: 1到100的和为:5050
print(f"1到{n}的和为:{sum_method2(n)}")  # 输出: 1到100的和为:5050
print(f"1到{n}的和为:{sum_method3(n)}")  # 输出: 1到100的和为:5050

while 循环

基本语法

while 条件:
    # 循环体
    pass

基本使用示例

# 初始化变量
total_sum = 0
count = 0
upper_limit = 100  # 设置上限值,便于维护

# while 循环计算 1 到 100 的和
while count < upper_limit:
    count += 1
    total_sum += count

# 打印最终结果
print(f"1到{upper_limit}的和为:{total_sum}")
# 输出: 1到100的和为:5050

while循环的实际应用

# 用户输入验证
def get_valid_number():
    while True:
        try:
            user_input = input("请输入一个正整数: ")
            number = int(user_input)
            if number > 0:
                return number
            else:
                print("请输入正整数!")
        except ValueError:
            print("请输入有效的数字!")

# 密码验证系统
def password_check():
    max_attempts = 3
    attempts = 0
    correct_password = "123456"
    
    while attempts < max_attempts:
        password = input("请输入密码: ")
        if password == correct_password:
            print("密码正确!")
            return True
        else:
            attempts += 1
            remaining = max_attempts - attempts
            if remaining > 0:
                print(f"密码错误!还有{remaining}次机会")
            else:
                print("密码错误次数过多,程序退出")
    return False

range() 函数详解

基本用法

# range(stop) - 从0到stop-1
print(list(range(5)))        # [0, 1, 2, 3, 4]

# range(start, stop) - 从start到stop-1
print(list(range(2, 8)))     # [2, 3, 4, 5, 6, 7]

# range(start, stop, step) - 步长为step
print(list(range(0, 10, 2))) # [0, 2, 4, 6, 8]
print(list(range(10, 0, -1))) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

实用技巧

# 反向遍历
for i in range(10, 0, -1):
    print(i, end=" ")
print()  # 输出: 10 9 8 7 6 5 4 3 2 1

# 隔行处理
numbers = list(range(1, 21))
for i in range(0, len(numbers), 2):
    print(f"第{i}个元素: {numbers[i]}")

# 创建等差数列
arithmetic_sequence = list(range(5, 50, 5))
print(f"等差数列: {arithmetic_sequence}")
# 输出: 等差数列: [5, 10, 15, 20, 25, 30, 35, 40, 45]

循环控制语句

break 语句

# 提前退出循环
for i in range(10):
    if i == 5:
        break
    print(i, end=" ")
print()  # 输出: 0 1 2 3 4

# 在while循环中使用break
count = 0
while True:
    count += 1
    if count > 5:
        break
    print(count, end=" ")
print()  # 输出: 1 2 3 4 5

continue 语句

# 跳过当前迭代
for i in range(10):
    if i % 2 == 0:  # 跳过偶数
        continue
    print(i, end=" ")
print()  # 输出: 1 3 5 7 9

# 打印奇数的另一种方法
for i in range(1, 11):
    if i % 2 != 0:
        print(i, end=" ")
print()  # 输出: 1 3 5 7 9

else 子句

# for循环的else(正常结束时执行)
for i in range(5):
    print(i)
else:
    print("循环正常结束")

# while循环的else
count = 0
while count < 3:
    print(count)
    count += 1
else:
    print("while循环正常结束")

# break会跳过else
for i in range(5):
    if i == 3:
        break
    print(i)
else:
    print("这行不会执行")  # 不会执行

循环遍历不同数据结构

1. 遍历列表

# 基本列表遍历
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
for fruit in fruits:
    print(fruit)

# 带索引的遍历
for index, fruit in enumerate(fruits):
    print(f"索引{index}: {fruit}")

# 反向遍历
for fruit in reversed(fruits):
    print(fruit)

# 列表切片遍历
numbers = list(range(10))
for num in numbers[2:8]:  # 遍历索引2到7的元素
    print(num)

2. 遍历元组

# 基本元组遍历
coordinates = (10, 20, 30)
for coord in coordinates:
    print(coord)

# 元组解包遍历
points = [(1, 2), (3, 4), (5, 6)]
for x, y in points:
    print(f"x={x}, y={y}")

3. 遍历字典

# 遍历字典的键
student = {"姓名": "张三", "年龄": 20, "成绩": 85}
for key in student:
    print(f"{key}: {student[key]}")

# 遍历键值对
for key, value in student.items():
    print(f"{key} = {value}")

# 遍历值
for value in student.values():
    print(value)

# 遍历键
for key in student.keys():
    print(key)

4. 遍历集合

# 集合遍历(无序)
unique_numbers = {1, 2, 3, 4, 5}
for num in unique_numbers:
    print(num)

# 集合排序后遍历
for num in sorted(unique_numbers):
    print(num)

5. 遍历字符串

# 字符串遍历
text = "Hello"
for char in text:
    print(char)

# 带索引遍历字符串
for index, char in enumerate(text):
    print(f"位置{index}: '{char}'")

# 反向遍历字符串
for char in reversed(text):
    print(char, end="")
print()  # 输出: olleH

嵌套循环

基本嵌套循环

# 打印乘法表
print("=== 九九乘法表 ===")
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}×{i}={i*j}", end="\t")
    print()  # 换行

# 矩阵遍历
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print("\n=== 矩阵遍历 ===")
for row in matrix:
    for element in row:
        print(element, end=" ")
    print()

嵌套循环的实际应用

# 寻找质数
def find_primes(limit):
    primes = []
    for num in range(2, limit + 1):
        is_prime = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    return primes

# 找出1到50的所有质数
prime_numbers = find_primes(50)
print(f"1到50的质数: {prime_numbers}")

# 图案打印
def print_pattern(rows):
    print("\n=== 星号图案 ===")
    for i in range(1, rows + 1):
        # 打印空格
        for j in range(rows - i):
            print(" ", end="")
        # 打印星号
        for k in range(2 * i - 1):
            print("*", end="")
        print()

print_pattern(5)

列表推导式

基本语法

# [表达式 for 变量 in 序列]
# [表达式 for 变量 in 序列 if 条件]

实用示例

# 创建平方数列表
squares = [x**2 for x in range(1, 11)]
print(f"平方数: {squares}")
# 输出: 平方数: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 筛选偶数
numbers = list(range(1, 21))
even_numbers = [x for x in numbers if x % 2 == 0]
print(f"偶数: {even_numbers}")
# 输出: 偶数: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# 条件表达式
processed = [x if x % 2 == 0 else -x for x in range(1, 11)]
print(f"处理后的数: {processed}")
# 输出: 处理后的数: [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]

# 嵌套列表推导式
matrix = [[i*j for j in range(1, 4)] for i in range(1, 4)]
print(f"乘法矩阵: {matrix}")
# 输出: 乘法矩阵: [[1, 2, 3], [2, 4, 6], [3, 6, 9]]

# 字符串处理
words = ["hello", "world", "python"]
uppercase_words = [word.upper() for word in words]
word_lengths = [len(word) for word in words]
print(f"大写: {uppercase_words}")
print(f"长度: {word_lengths}")

实用示例

1. 数学计算类

# 计算阶乘
def factorial(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

# 计算斐波那契数列
def fibonacci(n):
    fib_sequence = [0, 1]
    for i in range(2, n):
        fib_sequence.append(fib_sequence[i-1] + fib_sequence[i-2])
    return fib_sequence[:n]

# 测试
print(f"5的阶乘: {factorial(5)}")        # 输出: 5的阶乘: 120
print(f"前10项斐波那契数: {fibonacci(10)}")
# 输出: 前10项斐波那契数: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

2. 数据处理类

# 学生成绩统计
def analyze_grades(grades):
    total = 0
    count = 0
    max_grade = float('-inf')
    min_grade = float('inf')
    
    for grade in grades:
        total += grade
        count += 1
        if grade > max_grade:
            max_grade = grade
        if grade < min_grade:
            min_grade = grade
    
    average = total / count if count > 0 else 0
    
    return {
        '总分': total,
        '平均分': round(average, 2),
        '最高分': max_grade,
        '最低分': min_grade,
        '人数': count
    }

# 测试数据
student_grades = [85, 92, 78, 96, 88, 73, 91, 84]
result = analyze_grades(student_grades)
for key, value in result.items():
    print(f"{key}: {value}")

3. 搜索和过滤类

# 在列表中搜索元素
def search_element(lst, target):
    for index, element in enumerate(lst):
        if element == target:
            return index
    return -1  # 未找到

# 过滤满足条件的元素
def filter_elements(lst, condition_func):
    result = []
    for element in lst:
        if condition_func(element):
            result.append(element)
    return result

# 测试
numbers = [1, 5, 8, 12, 15, 23, 8, 30]
print(f"数字8的位置: {search_element(numbers, 8)}")  # 输出: 数字8的位置: 2

# 过滤大于10的数
greater_than_10 = filter_elements(numbers, lambda x: x > 10)
print(f"大于10的数: {greater_than_10}")  # 输出: 大于10的数: [12, 15, 23, 30]

4. 游戏相关

# 猜数字游戏
import random

def guess_number_game():
    secret_number = random.randint(1, 100)
    attempts = 0
    max_attempts = 7
    
    print("=== 猜数字游戏 ===")
    print("我想了一个1到100之间的数字,你有7次机会猜中它!")
    
    while attempts < max_attempts:
        try:
            guess = int(input(f"第{attempts + 1}次猜测: "))
            attempts += 1
            
            if guess == secret_number:
                print(f"恭喜你!用了{attempts}次就猜中了!")
                return
            elif guess < secret_number:
                print("太小了!")
            else:
                print("太大了!")
                
            remaining = max_attempts - attempts
            if remaining > 0:
                print(f"还有{remaining}次机会")
                
        except ValueError:
            print("请输入有效的数字!")
    
    print(f"游戏结束!正确答案是{secret_number}")

# 使用示例(取消注释运行)
# guess_number_game()

性能优化建议

1. 选择合适的循环方式

import time

# 性能测试函数
def performance_test():
    n = 1000000
    
    # 方法1: for循环
    start_time = time.time()
    total1 = 0
    for i in range(n):
        total1 += i
    time1 = time.time() - start_time
    
    # 方法2: 数学公式(最快)
    start_time = time.time()
    total2 = n * (n - 1) // 2
    time2 = time.time() - start_time
    
    # 方法3: sum函数
    start_time = time.time()
    total3 = sum(range(n))
    time3 = time.time() - start_time
    
    print(f"for循环耗时: {time1:.4f}秒")
    print(f"数学公式耗时: {time2:.4f}秒")
    print(f"sum函数耗时: {time3:.4f}秒")

# performance_test()  # 取消注释运行性能测试

2. 避免不必要的循环

# ❌ 不好的做法
numbers = list(range(1000))
result = []
for num in numbers:
    if num % 2 == 0:
        result.append(num * 2)

# ✅ 更好的做法(使用列表推导式)
result = [num * 2 for num in numbers if num % 2 == 0]

# ✅ 最佳做法(如果只是检查存在性)
def has_even_square(numbers):
    # 使用any()避免完整遍历
    return any(num % 2 == 0 for num in numbers)

3. 循环优化技巧

# 缓存循环条件
items = list(range(10000))
length = len(items)  # 缓存长度

# ❌ 每次都调用len()
for i in range(len(items)):
    pass

# ✅ 使用缓存的长度
for i in range(length):
    pass

# 减少循环内的计算
expensive_calc = lambda x: x ** 2 + x * 3 + 1

# ❌ 在循环内重复计算
results = []
for i in range(1000):
    results.append(expensive_calc(i))

# ✅ 预计算或使用缓存
cache = {}
results = []
for i in range(1000):
    if i not in cache:
        cache[i] = expensive_calc(i)
    results.append(cache[i])

学习建议

  1. 从简单开始 - 先掌握基本的for和while循环
  2. 多练习 - 通过实际例子加深理解
  3. 理解差异 - 明白for和while的适用场景
  4. 注意效率 - 学会选择最优的循环方式
  5. 善用工具 - 学会使用enumerate、zip等辅助函数

常见错误提醒

# ❌ 无限循环
# while True:
#     print("这会一直运行下去")

# ✅ 正确的无限循环(有退出条件)
count = 0
while True:
    count += 1
    if count > 5:
        break
    print(count)

# ❌ 修改正在遍历的列表
# lst = [1, 2, 3, 4, 5]
# for item in lst:
#     if item % 2 == 0:
#         lst.remove(item)  # 可能导致意外行为

# ✅ 正确做法:创建新列表
lst = [1, 2, 3, 4, 5]
new_lst = [item for item in lst if item % 2 != 0]
print(new_lst)  # [1, 3, 5]

本文档基于你的实际代码整理而成,包含了完整的语法说明和实用示例