sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1796 随笔 :: 22 文章 :: 24 评论 :: 226万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

range函数python用法

概述

range()python的一个内置函数,用来创建一个整数序列,常用于for循环中。理解range()的运用会对我们使用循环很有帮助。

语法

range函数语法格式如下:

  • - start:序列的起始数值,默认从0开始

  • - stop:序列结束的数值(不包含在序列中)

  • - step:步长,默认为1

参数说明

1.只有一个参数

range(stop)会创建一个从0开始一直增加到stop - 1的整数序列。例如:

输出结果:

2.有两个参数

range(start, stop)将会创建一个从start开始一直增加到stop - 1的整数序列。例如:

输出结果:

这里的stop值为5,但是实际上是创建14的序列,不包含stop本身。

3.有三个参数

range(start, stop, step)中的step表示每次跳跃的步长。例如:

输出结果:

这里我们设置start=1, stop=10, step=2,因此每次会跳跃2个数。

range类型

需要注意的是,range对象不是一个列表,而是一个只能迭代的”可迭代对象”。我们可以用list()来转换为列表类型。例如:

输出:

range函数示例

1.打印序列

range最简单的用法就是打印序列,例如我们想打印一个1-10的整数序列:

2.与列表推导式结合

由于range对象可以快速生成整数序列,我们可以将其与列表推导式结合使用:

3.numpy数组结合

NumPypython做科学计算的必备库。如果我们想生成一个递增的NumPy数组:

arange方法等效于range函数。

4.索引序列

我们可以利用range输出一个索引序列,来获取元组、列表或字符串中的元素:

5.结合enumerate函数

根据索引迭代元素时,我们通常会用到内置的enumerate函数,它会将索引和元素组合成一个元组:

这种方式更加Pythonic,无需使用range函数。

6.步长应用

选择不同的步长可以跳过不需要的元素,实现采样功能:

这里我们设置step=3,因此每次跳过两个数字。

7.反向迭代

如果想反向迭代序列,可以:

只需要将step设为负数即可。

8.结合random选择随机数

random库常用于生成随机数,结合range可以返回一个随机索引:

randrangerange使用类似,只是返回一个随机整数而不是序列。

range函数原理

实际上range使用了一种名为”迭代器”的技术来高效生成数值序列,而没有真的先创建一个完整的列表再返回,这才保证了range占用内存很小。

我们可以利用自己实现一个简单的Range,模拟range的工作原理:

这里 ourRange类实现了__iter__方法和yield语法,使得该类成为一个generator,可以按照规则一个一个地生成数值,而不是事先准备好一个完整数值列表。

这就是range函数的基本思想。

range常见问题

最后,我们来讨论下range使用过程中的一些常见问题。

1. range不包含end端点

这个问题之前已经提及过。很多人很容易忽略,必须要注意。

2. range必须为整数类型

由于range的输入必须为整数,所以不能是浮点数:

3. start,end,step的顺序不能搞反

如果搞反参数顺序则会产生意外的序列:

必须传入正确的顺序,否则需要对结果序列逆序处理。

4. 步长不能为0

如果将step设置为0,将会抛出异常:

这是因为步长为0会造成无限循环。

小结

以上就是Python range完整用法,希望对大家有帮助。range函数是Python迭代中很重要的一个工具。

range主要特点为:

- 是一个可迭代对象,而不是列表

- 不会一次性将所有值加载到内存中,数据量大时更高效

- 使用参数控制数列范围和步长,用法灵活

需要注意的参数顺序、边界指示等问题。

多加练习,灵活运用range函数可以使我们的代码更加Pythonic!

#python#
举报/反馈
原文链接:https://baijiahao.baidu.com/s?id=1785334041105964426&wfr=spider&for=pc
posted on   sunny123456  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示