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

简介: 本文深入浅出地讲解Python循环语句,涵盖for和while循环的基础与进阶用法,结合实例解析遍历、嵌套、控制流及性能优化技巧,助你掌握自动化处理数据的核心技能。


免费编程软件「python+pycharm」
链接:https://pan.quark.cn/s/48a86be2fdc0

在Python编程中,循环语句是控制程序流程的核心工具之一。它让代码能够重复执行特定操作,避免冗余的重复编写。本文将通过实际案例和通俗解释,带你掌握Python循环语句的精髓,从基础语法到进阶技巧,用最直观的方式理解循环的工作原理。
探秘代理IP并发连接数限制的那点事 - 2025-10-14T150250.120.png

一、为什么需要循环?——从重复劳动到自动化
想象你正在处理一份学生成绩单,需要计算100名学生的平均分。如果没有循环,你需要为每个学生写一段相同的代码:

无循环的冗余写法(仅展示3名学生)

score1 = 85
score2 = 90
score3 = 78
total = score1 + score2 + score3
average = total / 3
当学生数量增加到100人时,这种写法显然不现实。循环的作用就是让计算机自动完成重复操作,你只需告诉它"重复做什么"和"重复多少次"。
Python中的循环主要分为两类:for循环(明确次数)和while循环(条件满足时持续)。它们就像工厂里的两条生产线,分别适用于不同场景。

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

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

for 变量 in 序列:

# 循环体

案例1:计算列表总和

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

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

语法:

range(start, stop, step)

start: 起始值(默认0)

stop: 结束值(不包含)

step: 步长(默认1)

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

for i in range(1, 11, 2): # 从1开始,到10结束(不含),步长2
print(i, end=" ")
输出:
1 3 5 7 9

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

案例3:统计单词频率

word_counts = {"apple": 3, "banana": 2, "orange": 5}
for word, count in word_counts.items():
print(f"{word}出现了{count}次")
输出:
apple出现了3次
banana出现了2次
orange出现了5次

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

案例4:打印乘法表

for i in range(1, 10): # 外层循环控制行
for j in range(1, i+1): # 内层循环控制列
print(f"{j}x{i}={i*j}", end="\t")
print() # 每行结束后换行
输出(前3行):
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
三、while循环:条件驱动的灵活执行
与for循环的固定次数不同,while循环在条件为真时持续执行,适合不确定循环次数的场景。

  1. 基础语法:条件控制
    while 条件:

    循环体

    案例5:猜数字游戏

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("恭喜猜中!")
这个游戏中,while 循环会持续询问用户输入,直到猜中正确数字。

  1. 避免无限循环:设置退出条件
    while循环必须包含能最终使条件变为假的逻辑,否则会形成无限循环。

错误示范:

while True: # 缺少退出条件
print("无限循环中...")
修正方法:添加break语句

count = 0
while True:
print("当前计数:", count)
count += 1
if count >= 5: # 当计数达到5时退出
break

  1. continue与break:控制循环流程
    break:立即终止整个循环
    continue:跳过当前迭代,进入下一次循环
    案例6:筛选偶数

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in numbers:
if num % 2 != 0: # 如果是奇数
continue # 跳过本次循环
print(num, end=" ")
输出:
2 4 6 8
案例7:寻找质数

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提供了一种更简洁的循环写法——列表推导式,能在一行代码中完成循环和列表生成。

语法:

[表达式 for 变量 in 序列]
案例8:生成平方数列表

squares = [x**2 for x in range(1, 6)]
print(squares) # 输出: [1, 4, 9, 16, 25]
带条件的列表推导式:

even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares) # 输出: [4, 16, 36, 64, 100]

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

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

fruits = ["apple", "banana", "orange"]
for index, fruit in enumerate(fruits):
print(f"索引{index}: {fruit}")
输出:

索引0: apple
索引1: banana
索引2: orange

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

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

names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
for name, score in zip(names, scores):
print(f"{name}的成绩是{score}")
输出:
Alice的成绩是85
Bob的成绩是90
Charlie的成绩是78

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

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

低效写法:

for i in range(1000):
result = i * (len(some_list) + 1) # len()在每次循环都计算

高效写法:

list_length = len(some_list) + 1
for i in range(1000):
result = i * list_length # 只需计算一次

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

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

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)

高效解决方案:使用集合

set1 = set(list1)
set2 = set(list2)
common = list(set1 & set2) # 交集操作

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

案例11:读取大文件

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:爬取网页链接
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'): # 查找所有标签
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)

这个案例展示了如何用 for 循环遍历HTML标签,提取网页中的所有外部链接。
案例13:数据分析中的循环
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分的学生

highachievers = []
for
, row in df.iterrows(): # 遍历DataFrame的每一行
if all(row[1:] > 85): # 检查Math和English列
high_achievers.append(row['Name'])
print("优秀学生:", high_achievers)

输出:
Math平均分: 86.25
English平均分: 88.50
优秀学生: ['Bob', 'David']

七、总结与最佳实践
选择合适的循环:
已知循环次数 → for循环 + range()
条件满足时持续 → while循环
需要遍历序列 → for循环
控制循环流程:
提前退出:break
跳过当前迭代:continue
避免无限循环:确保条件最终会变为假
提升代码可读性:
复杂的循环逻辑拆分为函数
使用有意义的变量名
添加必要的注释
性能优化:
减少循环内部计算
避免不必要的嵌套循环
大数据使用生成器
Python的循环语句虽然简单,但通过灵活组合和优化,可以解决从基础数据处理到复杂算法实现的各种问题。理解其核心原理后,你会发现循环是构建高效、优雅代码的基石之一。

目录
相关文章
|
2月前
|
移动开发 开发工具 Android开发
Uniapp与原生App集成的流程
Uniapp与原生App集成的流程
887 3
|
2月前
|
缓存 JavaScript 小程序
怎样对UniApp的首屏渲染进行优化?
怎样对UniApp的首屏渲染进行优化?
443 140
|
2月前
|
Windows
Microsoft Activation Scripts v3.6 (MAS)激活工具安装教程!中文汉化版(激活工具)
Microsoft Activation Scripts v3.6(MAS)是一款开源、轻量级的批量激活工具,支持HWID、KMS38、TSforge等多种方式,可离线永久激活Win7至Win11及Office全系列。兼容旧系统如Vista,操作简单,无误报风险。
3317 0
|
2月前
|
人工智能 Kubernetes 调度
ModelDistribution:高效的大模型管理、分发和预热方案
阿里云ACK One舰队推出ModelDistribution方案,创新性采用OCI标准封装模型,实现跨地域高效分发与预热,解决大模型部署中的管理复杂、拉取慢、多集群同步难等痛点,助力企业平滑演进至多地域AI推理架构。
265 1
ModelDistribution:高效的大模型管理、分发和预热方案
|
2月前
|
移动开发 JavaScript API
如何保证 UniApp 插件接口与 UniApp 规范兼容?
如何保证 UniApp 插件接口与 UniApp 规范兼容?
287 137
|
2月前
|
数据采集 缓存 监控
阿里云CDN流量超额怎么办?
使用阿里云CDN时,流量超额易致额外费用。本文教你三招应对:实时监控并设置报警、优化配置减少消耗、购买流量包降低成本。常见原因包括访问突增、配置不当或网络攻击。
|
2月前
|
存储 消息中间件 API
订单退款自动化接口:高效处理退款流程的技术实现
本文介绍如何设计并实现高效的订单退款自动化接口,基于RESTful API与Python Flask框架,涵盖核心流程、关键技术、代码示例及最佳实践,提升电商系统退款效率与准确性。
259 0