新闻中心
Python range() 函数详解:实现区间端点包含的迭代技巧

python的`range()`函数在生成数字序列时默认不包含结束值。本文将详细讲解`range()`函数的工作原理,并提供一种简单有效的方法,即通过将结束值加一来实现在循环中包含指定区间终点的迭代。通过实例代码,读者将学会如何灵活控制`range()`函数的行为,以满足不同的编程需求,例如在给定范围内查找偶数时确保包含上限值。
理解 Python range() 函数
range() 函数是 Python 中用于生成整数序列的内置函数,常用于循环中。它的基本语法有三种形式:
-
range(stop): 生成从 0 开始,到 stop-1 结束的整数序列。
- 示例:list(range(5)) 将生成 [0, 1, 2, 3, 4]。
-
range(start, stop): 生成从 start 开始,到 stop-1 结束的整数序列。
- 示例:list(range(2, 5)) 将生成 [2, 3, 4]。
-
range(start, stop, step): 生成从 start 开始,到 stop-1 结束,每次递增 step 的整数序列。
- 示例:list(range(1, 10, 2)) 将生成 [1, 3, 5, 7, 9]。
关键特性: 无论哪种形式,range() 函数生成的序列都不包含 stop 参数指定的值。这是 range() 函数设计上的一个重要细节,也是许多初学者容易混淆的地方。
遇到的问题:区间上限值被排除
在实际编程中,我们有时需要遍历一个包含上限值的区间。例如,在一个给定数字范围 [A, B] 中查找偶数,我们期望 B 值如果本身是偶数,也应该被包含在结果中。然而,如果直接使用 range(A, B),B 值将永远不会被包含在迭代序列中。
考虑以下代码片段,它尝试在一个用户输入的数字范围内查找偶数:
counter = list(range(2))
numbers = []
for _ in counter: # 使用 _ 表示不关心循环变量
numbers.append(int(input("请输入一个数字: ")))
numbers.sort()
print("数字范围: ", numbers)
even_num = []
# 问题代码:range(numbers[0], numbers[1]) 不包含 numbers[1]
for n in range(numbers[0], numbers[1]):
if n == 0:
pass # 0 不计入偶数或奇数,直接跳过
elif n % 2 == 0:
even_num.append(n)
# else: pass # 奇数无需处理,可以省略此分支
print("偶数: ", even_num)当用户输入 5 和 10 时,numbers 列表将是 [5, 10]。此时,range(numbers[0], numbers[1]) 相当于 range(5, 10),它将生成序列 5, 6, 7, 8, 9。结果导致 10 这个偶数被遗漏了:
请输入一个数字: 5 请输入一个数字: 10 数字范围: [5, 10] 偶数: [6, 8]
显然,我们希望 10 也能被识别为偶数并包含在结果中。
解决方案:通过 stop + 1 实现包含上限
要解决 range() 函数不包含 stop 值的特性,同时又想在迭代中包含指定的上限值,最简单有效的方法是将 stop 值增加 1。
Reachout.ai
一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造
142
查看详情
例如,如果希望迭代从 start 到 end_inclusive(包含 end_inclusive),则应使用 range(start, end_inclusive + 1)。这样,range() 函数的“不包含结束值”的规则将作用于 end_inclusive + 1,从而使得 end_inclusive 被恰好包含在生成的序列中。
将上述问题代码中的循环修改为:
# 关键修改:将上限值 numbers[1] 加 1
for n in range(numbers[0], numbers[1] + 1):
# ... 检查偶数的逻辑保持不变 ...完整示例代码
下面是修改后的完整代码,它能够正确地包含范围的上限值:
counter = list(range(2))
numbers = []
for _ in counter:
numbers.append(int(input("请输入一个数字: ")))
numbers.sort()
print("数字范围: ", numbers)
even_num = []
# 关键修改:将上限值 numbers[1] 加 1,以包含该值
for n in range(numbers[0], numbers[1] + 1):
if n == 0:
pass # 0 不计入偶数或奇数,直接跳过
elif n % 2 == 0:
even_num.append(n)
# else: pass # 奇数无需处理,可以省略此分支
print("偶数: ", even_num)使用相同的输入 5 和 10 运行此代码,输出将是:
请输入一个数字: 5 请输入一个数字: 10 数字范围: [5, 10] 偶数: [6, 8, 10]
现在,10 已经被正确地包含在偶数列表中。
注意事项与最佳实践
- 数据类型限制: range() 函数只能处理整数。如果需要生成浮点数序列,range() 不适用。可以考虑使用 numpy.arange(如果使用 NumPy 库)或者手动通过 while 循环和浮点数增量来实现。
- 性能考量: range() 函数返回的是一个迭代器对象,而不是一个完整的列表。这意味着它不会一次性在内存中生成所有数字,而是在每次迭代时按需生成。这对于处理大范围数字序列时非常高效,能够节省大量内存。只有当您明确需要一个列表时,才应使用 list(range(...)) 进行转换。
- 代码可读性: 在某些情况下,+1 的操作可能不会立即被所有读者理解其意图。如果代码逻辑复杂,或者需要特别强调,可以添加注释来解释为什么需要 +1,例如:range(start, end_inclusive + 1) # 包含上限值。
- 负数和步长: range() 也支持负数作为 start、stop 值,以及负数作为 step 值,用于倒序迭代。理解这些用法有助于处理更复杂的迭代场景。例如,list(range(10, 0, -1)) 将生成 [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]。
总结
range() 函数是 Python 中一个强大且常用的工具,但其“不包含结束值”的特性是需要牢记的。当需要在迭代中包含指定的上限值时,简单的技巧是将 range() 函数的 stop 参数增加 1,即使用 range(start, stop_inclusive + 1)。掌握这一技巧,可以帮助您更精确地控制循环行为,编写出符合预期的、健壮的 Python 代码。
以上就是Python range() 函数详解:实现区间端点包含的迭代技巧的详细内容,更
多请关注其它相关文章!
# 正确地
# 搜狗seo推广托管
# 四平高科技自媒体营销推广
# 彭水做网站建设的公司
# seo优化考试试题
# 西安公司营销推广价格
# 昆明网站seo优化多少钱一年
# 莒南营销互联网推广公司
# 晴天优化网站
# 湛江网站建设在线咨询
# 重庆关键词排名专业公司
# 的是
# 如何做
# python
# 跳过
# 来实现
# 将是
# 不包含
# 请输入
# 限值
# 迭代
# elif
# 为什么
# 代码可读性
# 工具
# app
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
拼多多赚钱渠道_拼多多收益来源
J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析
CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程
AO3最新入口2025公告_AO3中文官网合集
必由学官方网站入口 必由学学生教师共用登录通道
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧
Win11怎么开启高性能模式_Windows 11电源计划优化设置
将JSON对象数组转置为键值对列表的实用指南
Golang如何使用const iota_Go iota常量计数器讲解
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
CSS布局中意外空白:解决padding-top导致的顶部间距问题
可靠CSGO开箱平台解析 CSGO开箱网合集
html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】
Mac怎么锁定备忘录_Mac备忘录加密设置教程
Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】
微信客户端如何收红包_微信客户端接收红包使用教程
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
yy漫画网页版官方入口_yy漫画官网登录页面链接
优化Log4j2控制台输出性能:解决异步日志瓶颈
限制HTML日期输入框的日期选择范围
HTML空白字符处理机制:渲染、DOM与编码实践
CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
React中useState与局部变量:理解组件状态管理与渲染机制
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
Lar*el 8 多关键词数据库搜索优化实践
b站怎么看视频的弹幕数量_b站弹幕数量查看方法
Win10双系统截图高效法 截屏快捷键速记【技巧】
Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析
必由学官网首页入口 必由学教师网页版登录指南
响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
css链接悬停下划线样式如何自定义_使用::after结合content和transition
Golang如何优化CPU绑定任务分配策略_Golang CPU任务分配优化实践
反效果?《战地6》免费试玩开启后玩家数不升反降
内存检查:在VS Code中调试C++时的内存视图
Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧
Lar*el DB::listen 事件中的查询执行时间单位解析
期待已久:小米17 Ultra、小米首款NAS本月登场
Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南
自定义Bag-of-Words实现:处理带负号的词汇权重
微信商城在哪里打开【步骤】
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明


2025-11-15
浏览次数:次
返回列表