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)
常见用途 控制循环次数、生成数字序列
转换 可转为 list、tuple 等
Python 2 vs 3 Python 3 的 range() 更高效
相关推荐
打工仔折腾 AI2 分钟前
Spring AI + Qwen 周报生成实战:从原始日志到人工确认卡
人工智能·后端·python·spring·elasticsearch·ai agent 实战
维克兜率天21 分钟前
【维克】统计套利建模:从因子到信号的完整流程
android·开发语言·python·算法·kotlin
全栈练习生23 分钟前
RAG 准确率提升体系化方案
python·ai
用户76241175670529 分钟前
第十一章 GUI界面编程
python
天天被压力31 分钟前
【Python量化实战宝典 #03】指数与板块行情接口全拆解:大盘·行业·概念一键取(Python 可跑)
java·人工智能·python
小马不起床32 分钟前
第七阶段:数据存储与部署
数据库·python
weixin_4617694041 分钟前
conda create 创建容器 Failed to resolve ‘repo.anaconda.com‘问题
开发语言·python·conda·repo·网络问题·无法创建
Want59543 分钟前
Python生日蛋糕
开发语言·python
小马不起床1 小时前
Django 后端实战指南_5:实现 JWT 登录
python·django·sqlite
FOAF-lambda1 小时前
winuia-auto 截图全攻略(ToBitmap、Screenshot 与 CaptureToImage 详解)
windows·python·自动化