精通 Python range() 函数:从基础到高级用法
精通 Python range() 函数:从基础到高级用法
什么是 Python range?
Python 的 range() 是内置生成器,根据开始、结束和可选步长生成整数序列。省略开始值时默认为 0,步长默认为 1,序列在结束值(不包含)前停止。例如 range(5) 生成 0, 1, 2, 3, 4。该函数在 for 循环迭代中不可或缺。
本教程你将学到:
range()的定义与语法- 历史:
range()与xrange() - 如何使用 start、stop 和 step
- 递增与递减范围
- 处理浮点数限制及替代方案
- 配合列表、数组及 NumPy
arange()使用 - 高级模式:合并范围、提取偶数、生成字母序列
语法
range(start, stop, step)
参数
- start(可选):序列首个整数,默认 0。
- stop(必需):上界(不包含),序列在此值前停止。
- step(可选):相邻值间隔,默认 1。
返回值
返回 range 对象,表现为整数的不可变序列。转为列表可显示完整序列。
Python range() 函数与历史
Python 3 引入 range(),取代 Python 2 的 xrange()。关键差异如下:
| range() | xrange() |
|---|---|
| 返回不可变数字序列 | 返回生成器对象 |
| 内存消耗与序列长度成正比 | 极小内存;惰性生成值 |
| 适合中小范围 | 适合大范围或无限序列 |
| 大范围因内存分配较慢 | 大范围迭代更快 |
使用 range()
打印 0 到 9 的基本示例:
for i in range(10):
print(i, end=" ")
输出:
0 1 2 3 4 5 6 7 8 9
使用 start 和 stop
指定起始值偏移序列:
for i in range(3, 10):
print(i, end=" ")
输出:
3 4 5 6 7 8 9
使用 start、stop 和 step
添加步长控制间隔:
for i in range(3, 10, 2):
print(i, end=" ")
输出:
3 5 7 9
正步长递增
默认步长 1,可指定任意正整数:
for i in range(1, 30, 5):
print(i, end=" ")
输出:
1 6 11 16 21 26
反向范围:负步长递减
负步长创建降序序列:
for i in range(15, 5, -1):
print(i, end=" ")
输出:
15 14 13 12 11 10 9 8 7 6
在 range() 中使用浮点数
内置 range() 仅接受整数。传入浮点数抛出 TypeError:
for i in range(10.5):
print(i, end=" ")
输出:
Traceback (most recent call last): File "python_range.py", line 1, infor i in range(10.5): TypeError: 'float' object cannot be interpreted as an integer
配合 for 循环使用 range()
常与 len() 配合遍历列表索引:
arr_list = ['Mysql', 'Mongodb', 'PostgreSQL', 'Firebase']
for i in range(len(arr_list)):
print(arr_list[i], end=" ")
输出:
Mysql Mongodb PostgreSQL Firebase
将 range() 转为列表
print(list(range(10)))
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
在 range() 中使用字符
range() 仅支持整数,但可通过 Unicode 码点生成字母序列:
def get_alphabets(startletter, stopletter, step):
for c in range(ord(startletter.lower()), ord(stopletter.lower()), step):
yield chr(c)
print(list(get_alphabets("a", "h", 1)))
输出:
['a', 'b', 'c', 'd', 'e', 'f', 'g']
访问范围元素
可通过迭代、索引或转列表获取值:
迭代
for i in range(6):
print(i)
输出:
0 1 2 3 4 5
索引
startvalue = range(5)[0]
print("The first element in range is = ", startvalue)
secondvalue = range(5)[1]
print("The second element in range is = ", secondvalue)
lastvalue = range(5)[-1]
print("The last element in range is = ", lastvalue)
输出:
The first element in range is = 0 The second element in range is = 1 The last element in range is = 4
使用 list()
print(list(range(10)))
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
示例:用 range() 生成偶数
for i in range(2, 20, 2):
print(i, end=" ")
输出:
2 4 6 8 10 12 14 16 18
合并两个 range() 输出
用 itertools.chain 合并:
from itertools import chain
print("Merging two range into one")
frange = chain(range(10), range(10, 20, 1))
for i in frange:
print(i, end=" ")
输出:
Merging two range into one 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
配合 NumPy 使用 range()
NumPy 的 arange() 类似 range() 但支持浮点步长:
语法
arange(start, stop, step)
示例
import numpy as np
for i in np.arange(10):
print(i, end=" ")
输出:
0 1 2 3 4 5 6 7 8 9
NumPy 浮点范围
for i in np.arange(0.5, 1.5, 0.2):
print(i, end=" ")
输出:
0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998
因二进制浮点运算,输出有时显示长小数,可按需四舍五入。
总结
- range() 由 start、stop、step 定义整数序列。
- Python 3 引入;xrange() 是 Python 2 前身。
- 正步长升序,负步长降序。
- 不支持浮点数;用 NumPy arange() 处理浮点。
- 通过迭代、索引或
list()转换访问元素。 - 用
itertools.chain合并范围,或生成字母等自定义序列。 - 大数值范围考虑生成器特性以节省内存。
Python
- 精通Python函数参数:位置、关键字与默认参数
- Python Lambda匿名函数实战指南
- Python 生成器:高效迭代与进阶用例
- Python 闭包详解:嵌套函数如何捕获变量
- 精通 Python 装饰器:专家技巧增强函数
- 精通 Python Lambda 函数:实用示例与最佳实践
- Python abs() 函数:计算数字与复数的绝对值
- Python round() 函数详解与实战示例
- 精通 Python range() 函数:从基础到高级用法
- 精通 Python map() 函数:语法、示例与最佳实践
- 精通 Python enumerate():为列表、元组、字符串、字典带索引循环
- Python list.count() 专家指南:语法、示例与性能解析