range
是 Python 中一个内置的不可变序列类型 ,用于生成一个整数序列,通常用于 for
循环中控制循环次数或生成特定范围的数值。它具有高效、节省内存的特点,因为它不会立即生成所有数值,而是按需动态计算。
1. 基本用法
语法
python
range(stop) # 生成 [0, stop) 的序列
range(start, stop) # 生成 [start, stop) 的序列
range(start, stop, step) # 生成 [start, stop) 的序列,步长为 step
start
(可选):起始值(默认为0
)。stop
(必选):结束值(不包含该值)。step
(可选):步长(默认为1
,可为负数)。
示例
python
# 生成 0 到 4 的序列(不包含 5)
for i in range(5):
print(i) # 输出: 0 1 2 3 4
# 生成 2 到 5 的序列(不包含 6)
for i in range(2, 6):
print(i) # 输出: 2 3 4 5
# 生成 1 到 9 的奇数序列(步长为 2)
for i in range(1, 10, 2):
print(i) # 输出: 1 3 5 7 9
# 倒序生成 5 到 1 的序列(步长为 -1)
for i in range(5, 0, -1):
print(i) # 输出: 5 4 3 2 1
2. 转换为列表或其他类型
range
对象本身是惰性的(不立即生成所有值),但可以转换为列表、元组等:
python
nums = range(5) # range(0, 5)
print(list(nums)) # 输出: [0, 1, 2, 3, 4]
print(tuple(nums)) # 输出: (0, 1, 2, 3, 4)
3. 常见操作
(1) 检查元素是否存在
python
r = range(5)
print(3 in r) # 输出: True
print(5 in r) # 输出: False
(2) 获取长度
python
r = range(1, 10, 2) # 1, 3, 5, 7, 9
print(len(r)) # 输出: 5
(3) 索引访问(不推荐)
虽然 range
支持索引,但通常直接遍历更高效:
python
r = range(5)
print(r[2]) # 输出: 2
(4) 切片(返回新的 range 对象)
python
r = range(10)
print(r[2:5]) # range(2, 5) → 2, 3, 4
print(r[::2]) # range(0, 10, 2) → 0, 2, 4, 6, 8
4. 与 for
循环结合
range
最常见的用途是控制循环次数:
python
# 打印 5 次 "Hello"
for _ in range(5):
print("Hello")
# 计算 1 到 10 的和
total = 0
for num in range(1, 11):
total += num
print(total) # 输出: 55
5. 注意事项
-
stop
不包含 :range(5)
生成0, 1, 2, 3, 4
,不包含5
。 -
步长不能为 0 :否则会报
ValueError
。pythonrange(0, 10, 0) # 报错: ValueError: range() arg 3 must not be zero
-
Python 2 vs Python 3:
- Python 2 的
range()
会直接生成列表(可能占用大量内存)。 - Python 3 的
range()
是惰性的,更节省内存。 - Python 2 的
xrange()
相当于 Python 3 的range()
(已弃用)。
- Python 2 的
6. 实际应用场景
-
遍历数字序列:
pythonfor i in range(1, 6): print(f"第 {i} 次循环")
-
生成固定长度的列表/元组:
pythonzeros = [0] * 5 # [0, 0, 0, 0, 0] ones = tuple(1 for _ in range(3)) # (1, 1, 1)
-
控制循环次数:
pythonfor _ in range(3): print("重复执行")
-
数学计算(如求和、阶乘) :
python# 计算 1! + 2! + ... + 5! total = 0 for n in range(1, 6): factorial = 1 for i in range(1, n + 1): factorial *= i total += factorial print(total) # 输出: 153
总结
特性 | 说明 |
---|---|
惰性生成 | 不立即计算所有值,节省内存 |
语法 | range(start, stop, step) |
常见用途 | 控制循环次数、生成数字序列 |
转换 | 可转为 list 、tuple 等 |
Python 2 vs 3 | Python 3 的 range() 更高效 |