python深入range函数用法详解

我酷爱python的原因,就是因为它每个细节都竭尽所能做到极致,就比如风云接下来要介绍的range,这个函数,只要接触过python的人,都不陌生,最常用的例子都是拿来生成循环序列,上手即用,并无深奥的理论,然而,它底层却隐藏着python设计者们的极致观念,在执行循环时,range的效率比list高,这你能想吗?因为它是惰性加载,节省空间,效率就高了,且听我一一道来。

range 是 Python 中一个强大的内置函数,是Python 中构建序列的基础工具,具备灵活性和高效性,在各种迭代和数据处理任务中都非常有用。

1. 基本语法

range(stop) range(start, stop[, step])

  • start(可选):序列的起始值,默认是 0。
  • stop(必须):序列的终止值(不包含此值)。
  • step(可选):序列中的步长,默认是 1。

返回一个不可变的数字序列(range 对象),需要通过迭代或转换为列表才能查看具体的数字。

2. 用法详解

2.1 仅指定终止值

# 从 0 到 9

for i in range(10):

    print(i, end=" ")  # 输出: 0 1 2 3 4 5 6 7 8 9

2.2 指定起始值和终止值

# 从 5 到 9

for i in range(5, 10):

    print(i, end=" ")  # 输出: 5 6 7 8 9

2.3 指定步长

# 从 1 到 9,步长为 2

for i in range(1, 10, 2):

    print(i, end=" ")  # 输出: 1 3 5 7 9

2.4 逆序生成

步长为负数时,生成降序序列:

# 从 10 到 2,步长为 -2

for i in range(10, 1, -2):

    print(i, end=" ")  # 输出: 10 8 6 4 2

3. 转换为列表

range 本身生成一个不可变对象,可以用 list 函数转换为列表以查看内容:

r = range(5)

print(list(r))  # 输出: [0, 1, 2, 3, 4]

4. 特点与优点

惰性生成

  • range 不会立即生成所有数字,而是按需迭代,节省内存。
  • 适合处理大范围数字。

r = range(10**6)

print(len(r))  # 输出: 1000000,占用内存很少

高效性

  • 操作速度快,内存占用低。

5. 使用场景

5.1 遍历循环

for i in range(3):

    print(f"Processing item {i}")

5.2 生成序列

numbers = list(range(1, 11))  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

5.3 索引迭代

data = ["a", "b", "c"]

for i in range(len(data)):

    print(f"Index {i}, Value {data[i]}")

6. 注意事项

6.1 stop 参数是非包含的

r = range(5)  # 包含 0 到 4,不包括 5

6.2 步长为 0 会报错

# 以下代码将抛出 ValueError:

range() arg 3 must not be zerorange(1, 10, 0)

6.3 超出范围

即使 range 的范围超出常规整数范围,Python 会自动支持超大整数。

r = range(10**6, 10**6 + 3)

print(list(r))  # 输出: [1000000, 1000001, 1000002]

7. 高级用法

7.1 判断值是否在范围中

range 对象支持 in 运算符:

r = range(10)

print(5 in r)   # 输出: True

print(15 in r)  # 输出: False

7.2 逆序遍历

for i in reversed(range(5)):

    print(i, end=" ")  # 输出: 4 3 2 1 0

7.3 配合枚举

data = ["apple", "banana", "cherry"]

for i, value in enumerate(data):

    print(f"Index {i}: {value}")

8. 实际案例

8.1 分页实现

page_size = 10

total_items = 35

for start in range(0, total_items, page_size):

    end = min(start + page_size, total_items)

    print(f"Processing items {start} to {end - 1}")

8.2 等差数列生成

start = 1

end = 20

step = 3

arithmetic_sequence = list(range(start, end, step))

print(arithmetic_sequence)  # 输出: [1, 4, 7, 10, 13, 16, 19]

9. 总结

特性

描述

参数

start、stop、step 三个参数灵活控制序列范围和步长。

惰性生成

高效内存使用,不立即创建完整序列,适合处理大范围数字。

支持迭代

与循环结合使用,提供简单高效的遍历机制。

转换支持

可通过 list 转换为列表或其他集合类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值