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() 更高效
相关推荐
虚拟搬运工2 分钟前
xformers造成comfyu启动失败
python·comfyui
Hello.Reader3 分钟前
PyFlink DataStream Operators 算子分类、函数写法、类型系统、链路优化(Chaining)与工程化踩坑
前端·python·算法
Learner14 分钟前
Python函数
开发语言·python
万行19 分钟前
机器学习&第五章生成式生成器
人工智能·python·算法·机器学习
_李小白20 分钟前
【Android FrameWork】延伸阅读:AMS 的 handleApplicationCrash
android·开发语言·python
万行37 分钟前
机器学习&第一章
人工智能·python·机器学习·flask·计算机组成原理
2301_7973122639 分钟前
学习java37天
开发语言·python
WJSKad12351 小时前
果园树干识别与定位_faster-rcnn_x101-32x4d_fpn_1x_coco改进实践
python
深蓝电商API1 小时前
Scrapy中间件实战:自定义请求头和代理池实现
python·scrapy·中间件
hui函数1 小时前
Python系列Bug修复|如何解决 pip install 安装报错 invalid command ‘bdist_wheel’(缺少 wheel)问题
python·bug·pip