讲师中心 微信公众号
AI工具推荐 视频效率加速

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

小敏大大_6867

小敏大大_6867

发布时间:2025-11-15 14:24:46

|

408人浏览过

|

来源于php中文网

原创

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

python的`range()`函数在生成数字序列时默认不包含结束值。本文将详细讲解`range()`函数的工作原理,并提供一种简单有效的方法,即通过将结束值加一来实现在循环中包含指定区间终点的迭代。通过实例代码,读者将学会如何灵活控制`range()`函数的行为,以满足不同的编程需求,例如在给定范围内查找偶数时确保包含上限值。

理解 Python range() 函数

range() 函数是 Python 中用于生成整数序列的内置函数,常用于循环中。它的基本语法有三种形式:

  1. range(stop): 生成从 0 开始,到 stop-1 结束的整数序列。
    • 示例:list(range(5)) 将生成 [0, 1, 2, 3, 4]。
  2. range(start, stop): 生成从 start 开始,到 stop-1 结束的整数序列。
    • 示例:list(range(2, 5)) 将生成 [2, 3, 4]。
  3. 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 值将永远不会被包含在迭代序列中。

考虑以下代码片段,它尝试在一个用户输入的数字范围内查找偶数:

立即学习“Python免费学习笔记(深入)”;

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 也能被识别为偶数并包含在结果中。

python-parallelization
python-parallelization

将顺序 Python 代码转换为并行/并发实现,用于在需要并行化 Python 代码、提升性能时使用。

下载

解决方案:通过 stop + 1 实现包含上限

要解决 range() 函数不包含 stop 值的特性,同时又想在迭代中包含指定的上限值,最简单有效的方法是将 stop 值增加 1。

例如,如果希望迭代从 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 已经被正确地包含在偶数列表中。

注意事项与最佳实践

  1. 数据类型限制: range() 函数只能处理整数。如果需要生成浮点数序列,range() 不适用。可以考虑使用 numpy.arange(如果使用 NumPy 库)或者手动通过 while 循环和浮点数增量来实现。
  2. 性能考量: range() 函数返回的是一个迭代器对象,而不是一个完整的列表。这意味着它不会一次性在内存中生成所有数字,而是在每次迭代时按需生成。这对于处理大范围数字序列时非常高效,能够节省大量内存。只有当您明确需要一个列表时,才应使用 list(range(...)) 进行转换。
  3. 代码可读性: 在某些情况下,+1 的操作可能不会立即被所有读者理解其意图。如果代码逻辑复杂,或者需要特别强调,可以添加注释来解释为什么需要 +1,例如:range(start, end_inclusive + 1) # 包含上限值。
  4. 负数和步长: 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 代码。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2831

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

534

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

482

2026.02.12

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

354

2023.09.25

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

100

2026.10.10

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

40

2026.10.10

Kratos框架Protobuf接口定义与代码生成合集
Kratos框架Protobuf接口定义与代码生成合集

本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

20

2026.10.10

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

40

2026.10.10

C++类与对象的封装方法教程
C++类与对象的封装方法教程

C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

40

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn