首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python循环语句:从基础到进阶的实用指南

Python循环语句:从基础到进阶的实用指南

原创
作者头像
富贵软件
发布2025-10-14 15:06:57
发布2025-10-14 15:06:57
4500
代码可运行
举报
文章被收录于专栏:编程教程编程教程
运行总次数:0
代码可运行

​免费编程软件「python+pycharm」

链接:https://pan.quark.cn/s/48a86be2fdc0

在Python编程中,循环语句是控制程序流程的核心工具之一。它让代码能够重复执行特定操作,避免冗余的重复编写。本文将通过实际案例和通俗解释,带你掌握Python循环语句的精髓,从基础语法到进阶技巧,用最直观的方式理解循环的工作原理。


一、为什么需要循环?——从重复劳动到自动化

想象你正在处理一份学生成绩单,需要计算100名学生的平均分。如果没有循环,你需要为每个学生写一段相同的代码:

代码语言:javascript
代码运行次数:0
运行
复制
# 无循环的冗余写法(仅展示3名学生)
score1 = 85
score2 = 90
score3 = 78
total = score1 + score2 + score3
average = total / 3
代码语言:javascript
代码运行次数:0
运行
复制
当学生数量增加到100人时,这种写法显然不现实。循环的作用就是让计算机自动完成重复操作,你只需告诉它"重复做什么"和"重复多少次"。

Python中的循环主要分为两类:for循环(明确次数)和while循环(条件满足时持续)。它们就像工厂里的两条生产线,分别适用于不同场景。


二、for循环:按次数重复的精确工具

1. 基础语法:遍历序列

for循环的核心是遍历一个序列(列表、元组、字符串等),对每个元素执行相同操作。基本结构如下:

代码语言:javascript
代码运行次数:0
运行
复制
for 变量 in 序列:
    # 循环体

案例1:计算列表总和

代码语言:javascript
代码运行次数:0
运行
复制
scores = [85, 90, 78, 92, 88]
total = 0
for score in scores:
    total += score  # 等价于 total = total + score
print("平均分:", total / len(scores))
代码语言:javascript
代码运行次数:0
运行
复制
运行结果:
代码语言:javascript
代码运行次数:0
运行
复制
平均分: 86.6
代码语言:javascript
代码运行次数:0
运行
复制
这里 for 循环依次取出  scores 中的每个分数,累加到 total 变量中,最后计算平均值。

2. range()函数:生成数字序列

当需要固定次数的循环时,range()函数是最佳搭档。它生成一个数字序列,常用于控制循环次数。

语法

代码语言:javascript
代码运行次数:0
运行
复制
range(start, stop, step)
# start: 起始值(默认0)
# stop: 结束值(不包含)
# step: 步长(默认1)

案例2:打印1到10的奇数

代码语言:javascript
代码运行次数:0
运行
复制
for i in range(1, 11, 2):  # 从1开始,到10结束(不含),步长2
    print(i, end=" ")
代码语言:javascript
代码运行次数:0
运行
复制
输出:
代码语言:javascript
代码运行次数:0
运行
复制
1 3 5 7 9

3. 遍历字典:处理键值对

字典的for循环默认遍历键,若需同时获取键值对,可使用.items()方法。

案例3:统计单词频率

代码语言:javascript
代码运行次数:0
运行
复制
word_counts = {"apple": 3, "banana": 2, "orange": 5}
for word, count in word_counts.items():
    print(f"{word}出现了{count}次")
代码语言:javascript
代码运行次数:0
运行
复制
输出:
代码语言:javascript
代码运行次数:0
运行
复制
apple出现了3次
banana出现了2次
orange出现了5次

4. 嵌套循环:处理多维数据

当需要处理二维数据(如矩阵)时,嵌套for循环非常实用。

案例4:打印乘法表

代码语言:javascript
代码运行次数:0
运行
复制
for i in range(1, 10):      # 外层循环控制行
    for j in range(1, i+1): # 内层循环控制列
        print(f"{j}x{i}={i*j}", end="\t")
    print()  # 每行结束后换行
代码语言:javascript
代码运行次数:0
运行
复制
输出(前3行):
代码语言:javascript
代码运行次数:0
运行
复制
1x1=1	
1x2=2	2x2=4	
1x3=3	2x3=6	3x3=9

三、while循环:条件驱动的灵活执行

for循环的固定次数不同,while循环在条件为真时持续执行,适合不确定循环次数的场景。

1. 基础语法:条件控制

代码语言:javascript
代码运行次数:0
运行
复制
while 条件:
    # 循环体

案例5:猜数字游戏

代码语言:javascript
代码运行次数:0
运行
复制
import random
target = random.randint(1, 100)
guess = None

while guess != target:
    guess = int(input("猜一个1-100的数字: "))
    if guess < target:
        print("太小了!")
    elif guess > target:
        print("太大了!")
print("恭喜猜中!")
代码语言:javascript
代码运行次数:0
运行
复制
这个游戏中,while 循环会持续询问用户输入,直到猜中正确数字。

2. 避免无限循环:设置退出条件

while循环必须包含能最终使条件变为假的逻辑,否则会形成无限循环。

错误示范

代码语言:javascript
代码运行次数:0
运行
复制
while True:  # 缺少退出条件
    print("无限循环中...")

修正方法:添加break语句

代码语言:javascript
代码运行次数:0
运行
复制
count = 0
while True:
    print("当前计数:", count)
    count += 1
    if count >= 5:  # 当计数达到5时退出
        break

3. continue与break:控制循环流程

  • break:立即终止整个循环
  • continue:跳过当前迭代,进入下一次循环

案例6:筛选偶数

代码语言:javascript
代码运行次数:0
运行
复制
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in numbers:
    if num % 2 != 0:  # 如果是奇数
        continue      # 跳过本次循环
    print(num, end=" ")
代码语言:javascript
代码运行次数:0
运行
复制
输出:
代码语言:javascript
代码运行次数:0
运行
复制
2 4 6 8

案例7:寻找质数

代码语言:javascript
代码运行次数:0
运行
复制
num = int(input("输入一个数字检查是否为质数: "))
i = 2
is_prime = True
while i * i <= num:  # 只需检查到√num
    if num % i == 0:
        is_prime = False
        break
    i += 1
print("是质数" if is_prime else "不是质数")

四、循环的高级技巧:提升代码效率

1. 列表推导式:简洁的循环写法

Python提供了一种更简洁的循环写法——列表推导式,能在一行代码中完成循环和列表生成。

语法

代码语言:javascript
代码运行次数:0
运行
复制
[表达式 for 变量 in 序列]

案例8:生成平方数列表

代码语言:javascript
代码运行次数:0
运行
复制
squares = [x**2 for x in range(1, 6)]
print(squares)  # 输出: [1, 4, 9, 16, 25]

带条件的列表推导式

代码语言:javascript
代码运行次数:0
运行
复制
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)  # 输出: [4, 16, 36, 64, 100]

2. enumerate():获取索引和值

在遍历序列时,经常需要同时获取索引和值,enumerate()函数可以完美解决这个问题。

案例9:打印带索引的列表元素

代码语言:javascript
代码运行次数:0
运行
复制
fruits = ["apple", "banana", "orange"]
for index, fruit in enumerate(fruits):
    print(f"索引{index}: {fruit}")

输出:

代码语言:javascript
代码运行次数:0
运行
复制
索引0: apple
索引1: banana
索引2: orange

3. zip():并行遍历多个序列

当需要同时遍历多个序列时,zip()函数可以将它们"压缩"在一起。

案例10:合并学生姓名和成绩

代码语言:javascript
代码运行次数:0
运行
复制
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
for name, score in zip(names, scores):
    print(f"{name}的成绩是{score}")
代码语言:javascript
代码运行次数:0
运行
复制
输出:
代码语言:javascript
代码运行次数:0
运行
复制
Alice的成绩是85
Bob的成绩是90
Charlie的成绩是78

五、循环性能优化:避免常见陷阱

1. 减少循环内部的计算

循环体中的计算会重复执行,应尽量将不依赖循环变量的计算移到循环外。

低效写法

代码语言:javascript
代码运行次数:0
运行
复制
for i in range(1000):
    result = i * (len(some_list) + 1)  # len()在每次循环都计算

高效写法

代码语言:javascript
代码运行次数:0
运行
复制
list_length = len(some_list) + 1
for i in range(1000):
    result = i * list_length  # 只需计算一次

2. 避免不必要的嵌套循环

嵌套循环的时间复杂度是O(n²),当数据量大时性能会急剧下降。

低效案例:查找两个列表的共同元素

代码语言:javascript
代码运行次数:0
运行
复制
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
common = []
for x in list1:
    for y in list2:
        if x == y:
            common.append(x)

高效解决方案:使用集合

代码语言:javascript
代码运行次数:0
运行
复制
set1 = set(list1)
set2 = set(list2)
common = list(set1 & set2)  # 交集操作

3. 合理使用生成器

处理大数据时,生成器可以节省内存,因为它逐个产生值而不是一次性生成所有值。

案例11:读取大文件

代码语言:javascript
代码运行次数:0
运行
复制
def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:  # 逐行读取,不占用大量内存
            yield line.strip()

for line in read_large_file("huge_file.txt"):
    process(line)  # 处理每一行

六、实战案例:循环的综合应用

案例12:爬取网页链接

代码语言:javascript
代码运行次数:0
运行
复制
import requests
from bs4 import BeautifulSoup

def extract_links(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    links = []
    for link in soup.find_all('a'):  # 查找所有<a>标签
        href = link.get('href')
        if href and href.startswith('http'):
            links.append(href)
    return links

website_links = extract_links("https://example.com")
for link in website_links[:5]:  # 打印前5个链接
    print(link)
代码语言:javascript
代码运行次数:0
运行
复制
这个案例展示了如何用 for 循环遍历HTML标签,提取网页中的所有外部链接。

案例13:数据分析中的循环

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd

# 模拟数据
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Math': [85, 90, 78, 92],
    'English': [88, 92, 85, 89]
}
df = pd.DataFrame(data)

# 计算每门课的平均分
for subject in ['Math', 'English']:
    avg_score = df[subject].mean()
    print(f"{subject}平均分: {avg_score:.2f}")

# 找出所有科目都高于85分的学生
high_achievers = []
for _, row in df.iterrows():  # 遍历DataFrame的每一行
    if all(row[1:] > 85):  # 检查Math和English列
        high_achievers.append(row['Name'])
print("优秀学生:", high_achievers)
代码语言:javascript
代码运行次数:0
运行
复制
输出:
代码语言:javascript
代码运行次数:0
运行
复制
Math平均分: 86.25
English平均分: 88.50
优秀学生: ['Bob', 'David']

七、总结与最佳实践

  1. 选择合适的循环
    • 已知循环次数 → for循环 + range()
    • 条件满足时持续 → while循环
    • 需要遍历序列 → for循环
  2. 控制循环流程
    • 提前退出:break
    • 跳过当前迭代:continue
    • 避免无限循环:确保条件最终会变为假
  3. 提升代码可读性
    • 复杂的循环逻辑拆分为函数
    • 使用有意义的变量名
    • 添加必要的注释
  4. 性能优化
    • 减少循环内部计算
    • 避免不必要的嵌套循环
    • 大数据使用生成器

Python的循环语句虽然简单,但通过灵活组合和优化,可以解决从基础数据处理到复杂算法实现的各种问题。理解其核心原理后,你会发现循环是构建高效、优雅代码的基石之一。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、为什么需要循环?——从重复劳动到自动化
  • 二、for循环:按次数重复的精确工具
    • 1. 基础语法:遍历序列
    • 2. range()函数:生成数字序列
    • 3. 遍历字典:处理键值对
    • 4. 嵌套循环:处理多维数据
  • 三、while循环:条件驱动的灵活执行
    • 1. 基础语法:条件控制
    • 2. 避免无限循环:设置退出条件
    • 3. continue与break:控制循环流程
  • 四、循环的高级技巧:提升代码效率
    • 1. 列表推导式:简洁的循环写法
    • 2. enumerate():获取索引和值
    • 3. zip():并行遍历多个序列
  • 五、循环性能优化:避免常见陷阱
    • 1. 减少循环内部的计算
    • 2. 避免不必要的嵌套循环
    • 3. 合理使用生成器
  • 六、实战案例:循环的综合应用
    • 案例12:爬取网页链接
    • 案例13:数据分析中的循环
  • 七、总结与最佳实践
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档