Python range 函数实用指南
对话实录
小白:(抓狂)我写了for i in range(5):,为什么只到 4?
专家:(推眼镜)range 是左闭右开区间!记住:包含起点,不包含终点!
基础用法三连击
1. 标准用法
# 生成0-4
print(list(range(5))) # → [0,1,2,3,4]
# 指定起点
print(list(range(2,6))) # → [2,3,4,5]
# 指定步长
print(list(range(1,10,2))) # → [1,3,5,7,9]
专家提醒:range 返回的是 range 对象,不是列表!
2. 负步长用法
# 倒序生成
print(list(range(5,0,-1))) # → [5,4,3,2,1]
# 实战案例:字符串反转
s = "hello"
print(''.join([s[i] for i in range(len(s)-1,-1,-1)])) # → "olleh"
实战案例
案例 1:生成索引
fruits = ["apple", "banana", "cherry"]
for i in range(len(fruits)):
print(f"{i}: {fruits[i]}")
案例 2:创建等差数列
# 0到1之间10个点
points = [i/10 for i in range(11)]
print(points) # → [0.0,0.1,0.2,...,1.0]
案例 3:矩阵初始化
# 3x3矩阵
matrix = [[0 for _ in range(3)] for _ in range(3)]
print(matrix) # → [[0,0,0],[0,0,0],[0,0,0]]
案例 4:进度条模拟
import time
for i in range(101):
print(f"\r进度:[{'#'*(i//2)}{' '*(50-i//2)}] {i}%", end="")
time.sleep(0.05)
四大血泪陷阱
空 range
# 错误示范
for i in range(5,2): # 不会报错,但不会执行
print(i)
# 正确做法
for i in range(5,2,-1):
print(i) # → 5 4 3
浮点数 range
# 错误示范
for i in range(0.1, 0.5, 0.1): # TypeError
print(i)
# 正确做法
from numpy import arange
for i in arange(0.1, 0.5, 0.1):
print(i) # → 0.1 0.2 0.3 0.4
大 range 内存问题
# 错误示范
nums = list(range(10**8)) # 内存爆炸!
# 正确做法
for i in range(10**8): # range对象是惰性的
process(i)
专家工具箱
1. range 属性检查
r = range(1,10,2)
print(r.start) # → 1
print(r.stop) # → 10
print(r.step) # → 2
2. range 切片操作
r = range(10)
print(r[2:5]) # → range(2,5)
print(r[::2]) # → range(0,10,2)
3. 自定义 range 类
class FloatRange:
def __init__(self, start, stop, step):
self.start = start
self.stop = stop
self.step = step
def __iter__(self):
current = self.start
while current < self.stop:
yield current
current += self.step
for f in FloatRange(0.1, 0.5, 0.1):
print(f) # → 0.1 0.2 0.3 0.4
小白:(献上膝盖)原来 range 这么强大!
专家:(扶起小白)记住:range 是 Python 的序列生成神器!