for 循环是 Python 中用于迭代(即遍历)序列(如列表、元组、字符串)或其他可迭代对象(如字典、集合)的主要方式,它的核心思想是:对于序列中的每一个元素,都执行一次相同的操作。

基础语法
for 循环的基本语法结构如下:
for variable in iterable:
# 循环体(要执行的代码块)
# 这里的代码会针对 iterable 中的每一个元素执行一次
variable:这是一个临时变量,它会依次接收iterable中每个元素的值,你可以自己给这个变量起任何合法的名字。in:这是 Python 的关键字,表示“在...之中”。iterable:任何可以被遍历的对象,比如列表、字符串、元组等。- 冒号是语法的一部分,表示循环体的开始。
- 缩进:循环体内的所有代码都必须缩进(通常是 4 个空格),这定义了哪些代码属于循环体。
在列表上的基本应用
让我们从最简单的例子开始:遍历一个列表并打印其中的每一个元素。
示例 1:遍历并打印列表元素
# 定义一个列表
fruits = ['apple', 'banana', 'cherry']
# 使用 for 循环遍历列表
for fruit in fruits:
print(fruit)
输出:

apple
banana
cherry
代码解析:
- Python 从
fruits列表中取出第一个元素'apple',并将其赋值给临时变量fruit。 - 执行循环体内的代码
print(fruit),打印出apple。 - 循环继续,Python 从
fruits列表中取出第二个元素'banana',赋值给fruit。 - 再次执行
print(fruit),打印出banana。 - 重复这个过程,直到列表中的所有元素都被处理完毕。
在循环中访问元素的索引
我们不仅需要元素的值,还需要知道它在列表中的位置(索引),有几种方法可以实现。
使用 range() 和 len()
这是最传统的方式,通过索引来访问列表元素。
fruits = ['apple', 'banana', 'cherry']
# range(len(fruits)) 会生成一个从 0 到 len(fruits)-1 的序列
for i in range(len(fruits)):
print(f"索引 {i} 对应的元素是: {fruits[i]}")
输出:

索引 0 对应的元素是: apple
索引 1 对应的元素是: banana
索引 2 对应的元素是: cherry
使用 enumerate() (推荐)
enumerate() 是 Python 内置的函数,它可以同时返回元素的索引和值,代码更简洁、更 Pythonic。
fruits = ['apple', 'banana', 'cherry']
# enumerate(fruits) 会返回 (索引, 值) 这样的元组对
for index, fruit in enumerate(fruits):
print(f"索引 {index} 对应的元素是: {fruit}")
输出:
索引 0 对应的元素是: apple
索引 1 对应的元素是: banana
索引 2 对应的元素是: cherry
在循环中修改列表
这是一个非常重要的知识点:直接在遍历列表的同时修改该列表(例如添加或删除元素)可能会导致意外的结果或错误。
错误示例:
# 目标:删除所有长度小于 5 的单词
words = ['apple', 'kiwi', 'banana', 'pear', 'fig']
# 错误的做法!
for word in words:
if len(word) < 5:
words.remove(word) # 在遍历时删除元素
print(words) # 你可能会以为结果是 ['apple', 'banana', 'pear'],但实际是...
错误输出:
['apple', 'banana', 'fig']
为什么会出错?
- 循环开始时,
words是['apple', 'kiwi', 'banana', 'pear', 'fig']。 word变为'apple',不满足len(word) < 5,不删除。word变为'kiwi',满足条件,words变为['apple', 'banana', 'pear', 'fig']。- 关键步骤:下一个
word不是'banana',而是列表中'kiwi'原来的位置,也就是现在的'pear'!'banana'被跳过了! word变为'pear',不满足条件。word变为'fig',满足条件,words变为['apple', 'banana', 'pear']。
正确的做法: 创建一个原始列表的副本进行迭代,或者创建一个新列表来存放结果。
正确做法 1:使用切片创建副本
words = ['apple', 'kiwi', 'banana', 'pear', 'fig']
# 使用 words[:] 创建一个原始列表的副本进行迭代
for word in words[:]: # 注意这里的 [:]
if len(word) < 5:
words.remove(word)
print(words) # 输出: ['apple', 'banana', 'pear']
正确做法 2:创建一个新列表(更推荐)
这种方法通常更清晰、更安全,也符合函数式编程的思想。
words = ['apple', 'kiwi', 'banana', 'pear', 'fig']
new_words = []
for word in words:
if len(word) >= 5:
new_words.append(word)
print(new_words) # 输出: ['apple', 'banana', 'pear']
列表推导式 (List Comprehension)
列表推导式是 for 循环的一种高级、简洁的写法,用于从一个列表创建一个新列表,它非常高效且易读。
语法:
[expression for item in iterable if condition]
expression:要生成的新元素的表达式。for item in iterable:循环部分。if condition:(可选)过滤条件。
示例:将上面的 "正确做法 2" 用列表推导式重写
words = ['apple', 'kiwi', 'banana', 'pear', 'fig'] # 将 for 循环和 if 判断压缩成一行 new_words = [word for word in words if len(word) >= 5] print(new_words) # 输出: ['apple', 'banana', 'pear']
列表推导式的威力:
示例:对列表中的每个数字进行平方
numbers = [1, 2, 3, 4, 5]
# 使用 for 循环
squared_numbers_loop = []
for num in numbers:
squared_numbers_loop.append(num ** 2)
# 使用列表推导式
squared_numbers_comp = [num ** 2 for num in numbers]
print(squared_numbers_loop) # 输出: [1, 4, 9, 16, 25]
print(squared_numbers_comp) # 输出: [1, 4, 9, 16, 25]
| 用途 | 代码示例 | 说明 |
|---|---|---|
| 遍历元素 | for item in my_list: |
最基础、最常用的用法。 |
| 遍历索引和值 | for index, value in enumerate(my_list): |
推荐方式,代码清晰。 |
| 修改列表 | for item in my_list[:]: |
遍历时修改原列表的安全方法。 |
| 创建新列表 | new_list = [item for item in my_list if condition] |
列表推导式,简洁高效。 |
掌握 for 循环是学习 Python 的关键一步,从基础的遍历开始,逐步掌握 enumerate 和列表推导式,你的 Python 代码会变得越来越优雅和强大。
