核心概念
for...in range(...) 是一个 for 循环,它用于重复执行一段代码。range() 函数是这个循环的关键,它生成一个整数序列,而 for...in 会依次从这个序列中取出每一个数字,赋给循环变量。

它的作用是:“对于某个范围内的每一个数,执行一次下面的代码块。”
range() 函数详解
range() 函数根据传入的参数不同,有三种主要用法,理解这三种用法是掌握 for...in range(...) 的关键。
range(stop) - 生成从 0 开始到 stop-1 的序列
这是 range() 最简单的形式,它生成一个从 0 开始,到 stop (不包括 stop) 结束的整数序列。
语法:
range(stop)

特点:
- 起始值默认为 0。
- 结束值是
stop,但不包含stop。 - 步长默认为 1。
示例: 我们想打印数字 0, 1, 2, 3, 4。
# range(5) 会生成序列 0, 1, 2, 3, 4
for i in range(5):
print(i)
输出:
0
1
2
3
4
可以看到,循环了 5 次,数字从 0 到 4。

range(start, stop) - 生成从 start 开始到 stop-1 的序列
这种形式可以指定一个自定义的起始值。
语法:
range(start, stop)
特点:
- 起始值是
start(包含start)。 - 结束值是
stop(不包含stop)。 - 步长默认为 1。
示例: 我们想打印数字 5, 6, 7, 8, 9。
# range(5, 10) 会生成序列 5, 6, 7, 8, 9
for i in range(5, 10):
print(i)
输出:
5
6
7
8
9
start 是 5,stop 是 10,所以循环打印了从 5 到 9 的所有整数。
range(start, stop, step) - 生成从 start 开始,按 step 步长递增/递减到 stop-1 的序列
这是最灵活的形式,可以指定步长,步长可以是正数(递增),也可以是负数(递减)。
语法:
range(start, stop, step)
特点:
- 起始值是
start(包含start)。 - 结束值是
stop(不包含stop)。 - 每次循环,变量会增加
step的值。
示例 A: 正数步长(递增) 我们想打印 0 到 10 之间的所有偶数。
# 从 0 开始,到 10 结束(不包含10),每次加 2
for i in range(0, 10, 2):
print(i)
输出:
0
2
4
6
8
示例 B: 负数步长(递减) 我们想从 10 倒数到 1。
# 从 10 开始,到 0 结束(不包含0),每次减 1
for i in range(10, 0, -1):
print(i)
输出:
10
9
8
7
6
5
4
3
2
1
注意: 当使用负数步长时,start 必须大于 stop,否则循环体不会执行。
实际应用场景
for...in range(...) 在很多场景中都非常有用。
重复执行操作
如果你想将某段代码执行固定的 N 次。
# 打印 5 次 "Hello, World!"
for _ in range(5): # 这里我们不需要用到循环变量 i,所以用下划线 _ 代替
print("Hello, World!")
提示: 当你在循环中不需要使用循环变量时,习惯用下划线
_作为变量名,这是一种 Pythonic 的写法,可以告诉阅读代码的人这个变量是“无用的”。
遍历序列的索引
虽然 for item in list: 是更 Pythonic 的方式,但 range() 结合 len() 函数可以让你通过索引来访问列表的元素。
fruits = ["apple", "banana", "cherry"]
# len(fruits) 返回 3, range(3) 生成 0, 1, 2
for i in range(len(fruits)):
print(f"索引 {i} 对应的水果是: {fruits[i]}")
输出:
索引 0 对应的水果是: apple
索引 1 对应的水果是: banana
索引 2 对应的水果是: cherry
数值计算
计算 1 到 100 的累加和。
total = 0
for i in range(1, 101): # 1 到 100 (包含100)
total += i # total = total + i
print(f"1 到 100 的累加和是: {total}")
输出:
1 到 100 的累加和是: 5050
与 for...in 直接遍历列表的区别
初学者常常会混淆 for...in range(len(my_list)) 和 for...in my_list,它们都能遍历列表,但有本质区别。
| 特性 | for i in range(len(my_list)) |
for item in my_list |
|---|---|---|
| 循环变量 | 获取的是索引 (0, 1, 2, ...) | 获取的是元素本身 |
| 访问元素 | 需要通过索引访问:my_list[i] |
直接就是元素:item |
| 适用场景 | 需要知道当前元素的索引时 | 只关心元素本身,不关心索引时 |
| 代码风格 | 更偏向 C/Java 风格 | 更 Pythonic、更简洁、更推荐 |
推荐做法:
- 如果只需要元素本身,优先使用
for item in my_list。 - 如果需要在循环中修改元素(因为需要知道索引位置),或者需要索引值,再使用
for i in range(len(my_list))。
for...in range(...) 是 Python 中一个强大而灵活的工具。
-
range()的三种形式:range(5)->0, 1, 2, 3, 4range(2, 7)->2, 3, 4, 5, 6range(1, 10, 2)->1, 3, 5, 7, 9range(8, 2, -2)->8, 6, 4
-
range()生成的是一个“序列生成器”,它不会一次性在内存中创建所有数字,这在处理大范围数字时非常高效。 -
根据你的需求选择正确的遍历方式。 在 90% 的情况下,当你只需要遍历一个序列的元素时,
for item in my_list是更好的选择,当你需要执行固定次数循环或需要索引时,for...in range(...)是不二之选。
