深入理解Python range()函数与for循环的完美配合

news2024/9/22 3:58:48

文末赠免费精品编程资料~~

今天我们要聊的是一个超级实用且基础的功能组合——range() 函数和 for 循环。无论你是刚开始学习Python,还是已经有点基础,这篇文章都将帮助你更深入地理解和掌握这两个工具。

1. 什么是 range()

range() 是Python中一个非常有用的内置函数,它用于生成一系列连续的整数。在Python 3中,range() 返回的是一个可迭代对象,而不是列表,这意味着它可以更高效地处理大数据集,因为它并不一次性创建所有数字,而是在迭代时按需生成。

基本语法:

range(stop)
range(start, stop[, step])
  • stop:必填参数,表示序列结束前的一个数字。
  • start:可选参数,默认为0,表示序列的起始数字。
  • step:可选参数,默认为1,表示序列中相邻数字之间的差值。

例子:

# 生成0到4的序列
for i in range(5):
    print(i)

# 输出: 0, 1, 2, 3, 4

# 生成1到4的序列
for i in range(1, 5):
    print(i)

# 输出: 1, 2, 3, 4

# 生成1到9的奇数序列
for i in range(1, 10, 2):
    print(i)

# 输出: 1, 3, 5, 7, 9

2. range()for 循环的结合

for 循环是Python中遍历序列或集合的常用方式,当与 range() 结合使用时,可以轻松地控制循环次数和执行特定次数的重复操作。

实战案例:
假设我们需要计算从1加到100的所有整数的总和,我们可以这样用 range()for 循环来实现:

total = 0
for num in range(1, 101):  # 生成1到100的序列
    total += num           # 累加每一个数到total
print(total)               # 输出结果应为5050

技巧提示:

  • 使用 range() 时,记得终点是不包含在内的,所以要确保你的终点设置正确。
  • 当你需要在一定范围内重复某个操作时,range() 配合 for 循环是一个非常高效的方法。

3. 高级技巧:反向循环和非1步长

range() 还支持反向循环和非1的步长,这对于一些特殊需求非常有用。

反向循环示例:

for i in range(10, 0, -1):
    print(i)
# 输出: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1

非1步长示例:

for i in range(0, 20, 3):
    print(i)
# 输出: 0, 3, 6, 9, 12, 15, 18

注意事项:

  • 当使用负数作为步长时,确保起点大于终点,否则将不会产生任何输出。
  • 步长可以是任何整数,但必须确保能够到达或接近终点,否则循环会提前结束。

继续深入:range() 的进阶应用与最佳实践

1. 利用 range() 创建矩阵

range() 不仅仅局限于简单的循环,它还可以用来生成复杂的结构,比如二维数组(矩阵)。这对于数据处理和算法设计非常有用。

示例代码:

# 创建一个5x5的零矩阵
matrix = [[0 for _ in range(5)] for _ in range(5)]
print(matrix)

# 输出:
# [[0, 0, 0, 0, 0],
#  [0, 0, 0, 0, 0],
#  [0, 0, 0, 0, 0],
#  [0, 0, 0, 0, 0],
#  [0, 0, 0, 0, 0]]

这里,我们使用了两层 for 循环,外层循环负责行,内层循环负责列,利用 range() 来确定矩阵的大小。

2. range() 在列表推导式中的应用

列表推导式是一种快速生成列表的语法,而 range() 可以简化其中的循环逻辑。

示例代码:

# 生成一个包含0到9的平方的列表
squares = [i**2 for i in range(10)]
print(squares)

# 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

在这个例子中,range() 用于生成0到9的序列,然后通过列表推导式计算每个数的平方。

3. 与条件语句结合使用

range() 还可以与条件语句结合,用于更复杂的循环控制。

示例代码:

# 打印出1到10之间所有的偶数
for i in range(1, 11):
    if i % 2 == 0:
        print(i)

# 输出: 2, 4, 6, 8, 10

这里,range() 生成1到10的序列,if 语句则用来筛选出其中的偶数。

4. 注意性能优化

虽然 range() 提供了方便,但在处理大规模数据时,直接使用列表可能更耗内存。对于大范围的迭代,考虑使用生成器表达式或 itertools 模块中的等效函数,如 itertools.count(),以节省内存。

示例代码:

from itertools import islice, count

# 生成一个无限计数器,然后截取前10个元素
big_range = islice(count(), 10)
for i in big_range:
    print(i)

# 输出: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

结束语

掌握了 range()for 循环的基本用法后,你已经踏上了成为Python高手的第一步。

文末福利

请关注下方公众号并后台回复编程资料免费获取Python编程、人工智能、爬虫等100+本精品电子书。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOV8网络结构|搞懂head

head里面的模块之前在backbone出现过的,有conv和c2f,还有concat是新的,就是用来做连接的,就是把几个通道的输出给连接起来,有C,H,W三个维度的,就看最后连接的参数,是按照哪个方向把他们加起来&a…

【C++从小白到大牛】布隆过滤器

布隆过滤器的提出 布隆过滤器概念 布隆过滤器的原理: 布隆过滤器的运作的总体过程: 布隆过滤器的插入 原码 布隆过滤器的查找 布隆过滤器删除 关于布隆过滤器的面试题: 1. 给两个文件,分别有100亿个query,我们…

EmguCV学习笔记 VB.Net 4.2 二值化

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSD…

K8S资源之PVPVC

概念 类似于Docker的数据卷挂载,将Pod中重要的文件挂载到宿主机上,如果Pod发生崩溃等情况自愈时,保证之前存储的数据没有丢失。 如上图中,将各个Pod中的目录挂载到存储层,如果Pod宕机后自愈均从存储层获取之前的数据…

STM32——I2C和SPI波形分析

波形分析 I2C波形 //写命令 void OLED_WR_CMD(uint8_t cmd) { HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&cmd,1,0x100); } //写数据 void OLED_WR_DATA(uint8_t data) { HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&am…

【Linux线程】线程的深度解析(线程是什么?线程与进程区别是什么?)

目录 一、前言 二、 什么是线程 💧线程的引入💧 💧线程的基本概念 💧 💧线程的理解 💧 💧进程与线程的关系💧 💧程序如何划分(重拾页表、见一下LWP&…

行业分析---AI时代是不断更新自身技术还是会利用新技术?

1 背景 最近有两个热点新闻,(1)“孟晚舟建议不要选和机器竞争的职业,根本不是它的对手”;(2)“周鸿祎建议萝卜快跑把无人出租车卖给司机,可实现三赢”。 技术的变革在互联网领域是比…

QT翻金币小游戏(含音频图片文件资源)

目录 QT翻金币小游戏 音频图片资源文件获取 效果展示 图片 视频 实现代码 main.cpp mymainwindow.h mymainwindow.cpp startscene.h startscene.cpp selectscene.cpp playscene.h playscene.cpp mypushbutton.h mypushbutton.cpp dataconfig.h dataconfig.cpp QT…

音频剪辑用什么工具?试试这三款

音乐,是情感的传递者,是灵魂的慰藉。作为一名音乐人,我一直在探索如何更好地捕捉和表达音乐的精髓。在这个数字化的时代,音频剪辑软件成为了我们表达创意的重要工具。今天,我想从一个音乐人的角度,分享我使…

C语言每日好题(3)

有任何不懂的问题可以评论区留言&#xff0c;能力范围内都会一一回答 #define _CRT_SECURE_NO_WARNING #include <stdio.h> #include <string.h> int main(void) {if ((strlen("abc") - strlen("abcdef")) > 0)printf(">\n")…

CentOS 7 下载/安装

下载 centos安装包下载_开源镜像站-阿里云centos安装包是阿里云官方提供的开源镜像免费下载服务&#xff0c;每天下载量过亿&#xff0c;阿里巴巴开源镜像站为包含centos安装包的几百个操作系统镜像和依赖包镜像进行免费CDN加速&#xff0c;更新频率高、稳定安全。https://mir…

SpringBoot(一)

1.Spring Boot概要 1.1 SpringBoot介绍 随着动态语言的流行&#xff08;Ruby、Scala、Node.js&#xff09;, Java的开发显得格外的笨重&#xff1b;繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术整合难度大。 在上述环境下&#xff0c;Spring Boot由此诞生&#…

每天五分钟计算机视觉:搭建人脸识别的Siamese深度神经网络模型

本文重点 前面的一篇文章中介绍了关于一次学习的问题,解决一次学习问题的关键在于学习到一个函数d,这个d可以计算出两张图片中的人脸是不是同一个人。那么我们需要搭建什么样的神经网络才可以让模型学习出这样的函数d呢?本文我们介绍一下Siamese神经网络结构,它可以帮助我…

快速上手体验MyPerf4J监控springboot应用(docker版快速开始-本地版)

使用MyPerf4J监控springboot应用 快速启动influxdb时序数据库日志收集器telegrafgrafana可视化界面安装最终效果 项目地址 项目简介: 一个针对高并发、低延迟应用设计的高性能 Java 性能监控和统计工具。 价值 快速定位性能瓶颈快速定位故障原因 快速启动 监控本地应用 idea配…

BeagleBone Black 上手

芯片特性 板级功能 资源内存 SDRAM 512MB DDR3L 800MHZ A single 256Mb x16 DDR3L 4Gb (512MB) memory device is used. The memory used is one of two devices: MT41K256M16HA-125 from Micron D2516EC4BXGGB from Kingston It will operate at a clock frequency of 400M…

DDD领域驱动设计的原理与实践

目录 什么是DDD领域驱动设计&#xff1f; 定义与概念&#xff1a; 核心思想&#xff1a; 核心概念&#xff1a; 核心原则&#xff1a; 优势与应用&#xff1a; 与微服务架构和传统三层架构的关系&#xff1a; 理解领域模型 举例 统一语言&#xff08;Ubiquitous Langu…

【C++11】入门基础

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目录…

基于Kotlin Multiplatform实现静态文件服务器(三)

Expect 和 Actual expect 关键字用于定义一个多平台通用的声明&#xff0c;即该声明在所有平台上都可用&#xff0c;并且需要在特定平台上实现。actual 关键字通常与 expect 关键字配合使用&#xff0c;用于定义多平台通用的接口和函数&#xff0c;从而允许在不同的平台上使用…

PyTorch--深度学习

onux部署功能 cpu运行时间 3. 自动求导 求导结果为&#xff1a;2 1 1

在java中前后端进行交互使用的内容

前言 本文将讲解在java前后端进行交互时会使用的内容, 过滤器 , 前后端交互时: 同步请求(了解)与异步请求, 后端响应json格式数据, 后端标准响应数据格式 过滤器 首先需要了解什么是过滤器: 过滤器是javaEE中在前向后端发送请求时进行拦截的技术,作用…