python - range

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. 注意事项

  1. stop 不包含range(5) 生成 0, 1, 2, 3, 4,不包含 5

  2. 步长不能为 0 :否则会报 ValueError

    python 复制代码
    range(0, 10, 0)  # 报错: ValueError: range() arg 3 must not be zero
  3. Python 2 vs Python 3

    • Python 2 的 range() 会直接生成列表(可能占用大量内存)。
    • Python 3 的 range() 是惰性的,更节省内存。
    • Python 2 的 xrange() 相当于 Python 3 的 range()(已弃用)。

6. 实际应用场景

  1. 遍历数字序列

    python 复制代码
    for i in range(1, 6):
        print(f"第 {i} 次循环")
  2. 生成固定长度的列表/元组

    python 复制代码
    zeros = [0] * 5          # [0, 0, 0, 0, 0]
    ones = tuple(1 for _ in range(3))  # (1, 1, 1)
  3. 控制循环次数

    python 复制代码
    for _ in range(3):
        print("重复执行")
  4. 数学计算(如求和、阶乘)

    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)
常见用途 控制循环次数、生成数字序列
转换 可转为 listtuple
Python 2 vs 3 Python 3 的 range() 更高效
相关推荐
闲人编程1 小时前
Flask 前后端分离架构实现支付宝电脑网站支付功能
python·架构·flask·支付宝·前后端·网站支付·apl
996终结者1 小时前
同类软件对比(四):Jupyter vs PyCharm vs VS Code:Python开发工具终极选择指南
vscode·python·jupyter·pycharm·visual studio code
果壳~1 小时前
【Python】爬虫html提取内容基础,bs4
爬虫·python·html
尝试经历体验2 小时前
pycharm突然不能正常运行
python·深度学习·pycharm
jay神3 小时前
基于Python的商品爬取与可视化系统
爬虫·python·数据分析·毕业设计·可视化系统
浪浪山齐天大圣3 小时前
python数据可视化之Matplotlib(8)-Matplotlib样式系统深度解析:从入门到企业级应用
python·matplotlib·数据可视化
F_D_Z3 小时前
【PyTorch】单对象分割
人工智能·pytorch·python·深度学习·机器学习
编程自留地3 小时前
18.4 查看订单
python·django·商城
wanzhong23333 小时前
学习triton-第1课 向量加法
开发语言·python·高性能计算
浊酒南街3 小时前
Pytorch基础入门4
人工智能·pytorch·python