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() 更高效
相关推荐
陈天伟教授5 小时前
人工智能训练师认证教程(2)Python os入门教程
前端·数据库·python
2301_764441335 小时前
Aella Science Dataset Explorer 部署教程笔记
笔记·python·全文检索
爱笑的眼睛115 小时前
GraphQL:从数据查询到应用架构的范式演进
java·人工智能·python·ai
BoBoZz195 小时前
ExtractSelection 选择和提取数据集中的特定点,以及如何反转该选择
python·vtk·图形渲染·图形处理
liwulin05066 小时前
【PYTHON-YOLOV8N】如何自定义数据集
开发语言·python·yolo
木头左6 小时前
LSTM量化交易策略中时间序列预测的关键输入参数分析与Python实现
人工智能·python·lstm
电子硬件笔记6 小时前
Python语言编程导论第七章 数据结构
开发语言·数据结构·python
HyperAI超神经7 小时前
【vLLM 学习】Prithvi Geospatial Mae
人工智能·python·深度学习·学习·大语言模型·gpu·vllm
逻极7 小时前
Python MySQL防SQL注入实战:从字符串拼接的坑到参数化查询的救赎
python·mysql·安全·sql注入
赫凯7 小时前
【强化学习】第一章 强化学习初探
人工智能·python·强化学习