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() 更高效
相关推荐
xiao助阵13 分钟前
python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
开发语言·python
麻辣清汤2 小时前
结合BI多维度异常分析(日期-> 商家/渠道->日期(商家/渠道))
数据库·python·sql·finebi
钢铁男儿2 小时前
Python 正则表达式(正则表达式和Python 语言)
python·mysql·正则表达式
钢铁男儿2 小时前
Python 正则表达式实战:解析系统登录与进程信息
开发语言·python·正则表达式
☺����3 小时前
实现自己的AI视频监控系统-第一章-视频拉流与解码1
人工智能·python·音视频
前端小趴菜053 小时前
python - 元组常用操作
python
前端小趴菜053 小时前
python - 列表方法
python
前端小趴菜053 小时前
组合数据类型
python
Kan先生3 小时前
对象存储解决方案:MinIO 的架构与代码实战
数据库·python