Python-VBA函数之旅-enumerate函数

目录

1、enumerate函数:

1-1、Python:

1-2、VBA:

 2、相关文章:

个人主页:非风V非雨-CSDN博客


        enumerate函数在Python中是一个强大的内置函数,用于将一个可迭代对象转换为一个索引序列,同时返回每个元素的索引和对应的值。常见的应用场景有:

1、索引处理:enumerate()函数允许我们对索引进行起始位自定义、反转、动态添加步长等处理。

2、遍历操作:enumerate()函数可用于遍历可迭代对象,例如,列表、字典、元组、字符串、文件等。

3、位置跟踪:enumerate()函数可用于数据点、对象等的位置标记及相关信息获取。

4、图形可视化:在开发图形用户界面时,enumerate()函数可用于处理屏幕对象的相关信息。

5、多重枚举:与zip()函数结合使用,可实现多个可迭代对象的枚举。

6、条件枚举:enumerate()函数可以在循环内部,配合条件语句来跳过某些元素,实现条件枚举。

7、配合其他函数使用:enumerate()函数本身就可以和许多其他函数或结构配合使用,特别是那些需要处理序列或迭代器的函数和结构。

        总之,在需要访问可遍历对象的索引和值的场景中,enumerate()函数都非常有用。

1、enumerate函数:
1-1、Python:
# 1.函数:enumerate
# 2.功能:
# 2-1、将一个可迭代的对象组合为一个带有数据和数据下标的索引序列,返回一个枚举类型
# 2-2、将一个可迭代的对象组合为一个带有数据和数据索引的序列,返回一个枚举类型
# 3.语法:
# 3-1、enumerate(iterable, start=0)
# 3-2、for index, item in enumerate(listname):
#      输出index和item
# 4.参数:
# 4-1. iterable:必需参数,一个可迭代对象,如列表、元组、字符串等
#      start:可选参数,用于指定计数的起始值,默认为0
# 4-2. index:用于保存元素的索引
#      item:用于保存获取到的元素值,要输出元素内容时,直接输出该变量即可
#      listname:序列名称
# 5.返回值:返回一个枚举对象
# 6.说明:
# 7.示例:
# 应用1:索引处理
# 使用enumerate函数遍历列表,并设置起始值为1
fruits = ['apple', 'banana', 'orange']
for index, fruit in enumerate(fruits, start=1):print(f"Index: {index}, Fruit: {fruit}")
# Index: 1, Fruit: apple
# Index: 2, Fruit: banana
# Index: 3, Fruit: orange# 反转索引
my_list = ['a', 'b', 'c', 'd']
for index, value in enumerate(reversed(my_list), start=1):reversed_index = len(my_list) - index + 1print(f"Reversed Index: {reversed_index}, Value: {value}")
# Reversed Index: 4, Value: d
# Reversed Index: 3, Value: c
# Reversed Index: 2, Value: b
# Reversed Index: 1, Value: a# 应用2:遍历操作
# 遍历列表并获取索引和值
fruits = ['apple', 'banana', 'orange']
for index, fruit in enumerate(fruits, start=1):print(f"Index: {index}, Fruit: {fruit}")
# Index: 1, Fruit: apple
# Index: 2, Fruit: banana
# Index: 3, Fruit: orange# 遍历文件并跟踪行号
with open('file.txt', 'r') as file:for line_number, line in enumerate(file, start=1):print(f"Line {line_number}: {line.strip()}")
# Line 1: 1111
# Line 2: 2222
# Line 3: 3333
# Line 4: 4444# 遍历字典的键和值
my_dict = {'a': 1, 'b': 2, 'c': 3}
for index, (key, value) in enumerate(my_dict.items()):print(f"Index: {index}, Key: {key}, Value: {value}")
# Index: 0, Key: a, Value: 1
# Index: 1, Key: b, Value: 2
# Index: 2, Key: c, Value: 3# 遍历字符串并处理字符位置
text = "Myelsa"
for index, char in enumerate(text):print(f"字符位置{index}: {char}")
# 字符位置0: M
# 字符位置1: y
# 字符位置2: e
# 字符位置3: l
# 字符位置4: s
# 字符位置5: a# 应用3:位置跟踪
data = [3, 5, 6, 8, 10, 11, 24]
target_value = 24
for index, value in enumerate(data):if value == target_value:print(f"Found {target_value} at index {index}")break
# Found 24 at index 6# 应用4:图形可视化
# 假设这是我们的游戏对象类
class GameObject:def __init__(self, name, x, y):self.name = nameself.x = xself.y = ydef __str__(self):return f"{self.name} at ({self.x}, {self.y})"
if __name__ == '__main__':# 创建游戏对象列表game_objects = [GameObject("Object 1", 1, 2),GameObject("Object 2", 3, 4),GameObject("Object 3", 5, 6),# ... 更多游戏对象]# 使用 enumerate 函数遍历游戏对象列表,并打印位置和名称for index, obj in enumerate(game_objects):print(f"Object at index {index}: {obj}")# 如果我们想要进行更复杂的操作,比如移动对象或检查碰撞,我们可以在循环内部添加逻辑for index, obj in enumerate(game_objects):# 假设我们移动每个对象到新的位置new_x = obj.x + 1  # 例如,向右移动一个单位new_y = obj.y + 1  # 例如,向下移动一个单位obj.x = new_xobj.y = new_yprint(f"Moved {obj.name} to ({new_x}, {new_y})")# 打印移动后的对象位置for index, obj in enumerate(game_objects):print(f"Object at index {index} after moving: {obj}")
# Object at index 0: Object 1 at (1, 2)
# Object at index 1: Object 2 at (3, 4)
# Object at index 2: Object 3 at (5, 6)
# Moved Object 1 to (2, 3)
# Moved Object 2 to (4, 5)
# Moved Object 3 to (6, 7)
# Object at index 0 after moving: Object 1 at (2, 3)
# Object at index 1 after moving: Object 2 at (4, 5)
# Object at index 2 after moving: Object 3 at (6, 7)# 应用5:多重枚举
names = ['Myelsa', 'Bruce', 'Jimmy']
ages = [18, 6, 15]
for index, (name, age) in enumerate(zip(names, ages), start=1):print(f"Index: {index}, Name: {name}, Age: {age}")
# Index: 1, Name: Myelsa, Age: 18
# Index: 2, Name: Bruce, Age: 6
# Index: 3, Name: Jimmy, Age: 15# 应用6:条件枚举
# 枚举时跳过某些元素
my_list = [1, 2, 3, 4, 5]
for index, value in enumerate(my_list):if value % 2 == 0:  # 跳过偶数continueprint(f"Index: {index}, Value: {value}")
# Index: 0, Value: 1
# Index: 2, Value: 3
# Index: 4, Value: 5# 枚举时使用自定义的索引函数
def custom_index(iterable):for i in range(len(iterable)):yield i**2  # 使用平方作为索引
if __name__ == '__main__':my_list = ['a', 'b', 'c', 'd']for index, value in zip(custom_index(my_list), my_list):print(f"Custom Index: {index}, Value: {value}")
# Custom Index: 0, Value: a
# Custom Index: 1, Value: b
# Custom Index: 4, Value: c
# Custom Index: 9, Value: d# 枚举时同时获取前一个和下一个元素
# 假设我们有一个列表
data = ['a', 'b', 'c', 'd', 'e']
# 初始化前一个元素为 None,因为在列表的第一个元素之前没有元素
prev_element = None
# 遍历列表,除了最后一个元素
for index, current_element in enumerate(data[:-1]):  # 使用切片排除最后一个元素# 获取后一个元素next_element = data[index + 1]# 打印结果print(f"Previous Element: {prev_element}, Current Element: {current_element}, Next Element: {next_element}")# 更新前一个元素为当前元素,以便在下一次循环中使用prev_element = current_element
# 注意:最后一个元素没有后一个元素,所以上面的循环没有处理它。
# 如果你需要处理最后一个元素(尽管它没有后一个元素),你可以单独处理它:
if data:  # 确保列表不为空last_index = len(data) - 1last_element = data[last_index]print(f"Last Element: {last_element}, No Next Element")
# Previous Element: None, Current Element: a, Next Element: b
# Previous Element: a, Current Element: b, Next Element: c
# Previous Element: b, Current Element: c, Next Element: d
# Previous Element: c, Current Element: d, Next Element: e
# Last Element: e, No Next Element# 枚举时动态添加步长
my_list = ['a', 'b', 'c', 'd', 'e']
for index, value in enumerate(my_list[::2]):print(f"Index: {index}, Value: {value}")
# Index: 0, Value: a
# Index: 1, Value: c
# Index: 2, Value: e# 应用7:配合其他函数或对象使用
# 与zip()函数一起组合
names = ['Myelsa', 'Bruce', 'Jimmy']
ages = [18, 6, 15]
for index, (name, age) in enumerate(zip(names, ages), start=1):print(f"Index: {index}, Name: {name}, Age: {age}")
# Index: 1, Name: Myelsa, Age: 18
# Index: 2, Name: Bruce, Age: 6
# Index: 3, Name: Jimmy, Age: 15# 与map()函数一起组合
my_list = ['a', 'b', 'c']
indexed_list = list(map(lambda x: (x[0], x[1].upper()), enumerate(my_list)))
print(indexed_list)
# [(0, 'A'), (1, 'B'), (2, 'C')]# 与filter()函数一起组合
my_list = ['a', 'b', 'c']
filtered_list = list(filter(lambda x: x[0] % 2 == 0, enumerate(my_list)))
print(filtered_list)
# [(0, 'a'), (2, 'c')]# 列表推导式(List comprehension)
my_list = ['a', 'b', 'c']
new_list = [(index, value) for index, value in enumerate(my_list)]
print(new_list)
# [(0, 'a'), (1, 'b'), (2, 'c')]# 与sorted()函数一起组合
my_list = ['c', 'a', 'b']
sorted_enum = sorted(enumerate(my_list), key=lambda x: x[1])
for index, value in sorted_enum:print(f"Index: {index}, Value: {value}")
# Index: 1, Value: a
# Index: 2, Value: b
# Index: 0, Value: c# 与Pandas的配合使用
import pandas as pd
# 创建一个简单的 DataFrame
data = {'Name': ['Myelsa', 'Bruce', 'Jimmy'],'Age': [18, 6, 15],'City': ['Guangzhou', 'Foshan', 'Zhuhai']}
df = pd.DataFrame(data)
# 使用enumerate和iterrows()遍历DataFrame的行
for index, row in enumerate(df.iterrows()):i, row_data = row  # row 是一个包含索引和行的元组print(f"Row {index} (Index: {i}):")for column, value in row_data.items():print(f"  {column}: {value}")
# 如果你只需要遍历索引和列名,可以使用iteritems()
for index, (column_name, column_data) in enumerate(df.items()):print(f"Column {index}: {column_name}")print("  Values:", column_data.tolist())
# Row 0 (Index: 0):
#   Name: Myelsa
#   Age: 18
#   City: Guangzhou
# Row 1 (Index: 1):
#   Name: Bruce
#   Age: 6
#   City: Foshan
# Row 2 (Index: 2):
#   Name: Jimmy
#   Age: 15
#   City: Zhuhai
# Column 0: Name
#   Values: ['Myelsa', 'Bruce', 'Jimmy']
# Column 1: Age
#   Values: [18, 6, 15]
# Column 2: City
#   Values: ['Guangzhou', 'Foshan', 'Zhuhai']
1-2、VBA:
略,待后补。
2、相关文章:

2-1、Python-VBA函数之旅-bytes()函数 

2-2、Python-VBA函数之旅-callable()函数

2-3、Python-VBA函数之旅-classmethod()函数 

2-4、Python-VBA函数之旅-compile()函数 

Python算法之旅:Algorithm

Python函数之旅:Functions 

个人主页:非风V非雨-CSDN博客

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

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

相关文章

java-spring 图灵 04 doscan

01.本次的重点依旧是扫描函数,这次是spring中的源码: 02.第一步,构造AnnotationConfigApplicationContext 主方法: public static void main(String[] args) {// 创建一个Spring容器AnnotationConfigApplicationContext applica…

C#基础|Debug程序调试学习和技巧总结

哈喽,你好啊,我是雷工! 在程序的开发过程中,可能绝大部分时间是用来调试程序, 当完成了某个功能的编程,都需要调试一下程序,看编程是否存在问题。 01 为什么需要程序调试 无论是电气工程师还…

深入探究图像增强(C语言实现)

我们将从基础出发使用C语言进行图像处理与分析,重点讨论图像增强和平滑技术。图像增强技术旨在通过增加对比度、亮度和整体清晰度来改善图像的视觉质量。另一方面,图像平滑方法则用于减少噪声并减少图像中的突变,使图像更加均匀和视觉上吸引人…

2024新版淘宝客PHP网站源码

源码介绍 2024超好看的淘客PHP网站源码,可以做优惠券网站,上传服务器,访问首页进行安装 安装好了之后就可以使用了,将里面的信息配置成自己的就行 喜欢的朋友们拿去使用把 效果截图 源码下载 2024新版淘宝客网站源码

高精度算法(1)

前言 今天来讲一讲高精度算法,我们说一个数据类型,有它的对应范围比如int类型最多 可以包含到负2的31次方到2的31次方减一 其实大概就是20亿左右那么其他的类型也同样如此 那么,如何解决一个很大很大的数的运算呢? 我们今天介…

OSPF综合大实验

1、R4为ISP,其上只配置IP地址;R4与其他所直连设备间均使用公有IP; 2、R3-R5、R6、R7为MGRE环境,R3为中心站点; 3、整个OSPF环境IP基于172.16.0.0/16划分;除了R12有两个环回,其他路由器均有一个环…

局域网管理软件,适合在局域网内的管理软件有哪些?

信息技术的不断发展,局域网在企业、学校等机构中得到了广泛应用。 局域网不仅能够提高数据传输效率,还能实现资源共享和协同工作。 为了更好地管理和维护局域网,需要使用一些专业的局域网管理软件。 一、局域网的应用范围 局域网&#xff…

【算法一则】分隔链表

题目 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head [1,4,3,2,5,2], x …

做一个图像分类任务(一)准备数据集

文章目录 环境准备准备数据集爬取数据代码删除多余的文件fruit81水果数据图像分类数据集下载统计图像的尺寸和比例分布代码划分训练集和数据集代码可视化图像代码统计各类别的数量 环境准备 推荐按照原作者推荐的环境:代码测试云GPU环境:GPU RTX 3060、…

如何安全、高速、有效地利用IP代理爬取数据

陈老老老板🧙‍♂️ 👮‍♂️本文专栏:生活(主要讲一下自己生活相关的内容)生活就像海洋,只有意志坚强的人,才能到达彼岸。 🤴本文简述:如何安全、高速、有效地利用IP代理爬取数据 &#x1f473…

多模态AnyGPT——整合图像、语音和文本多模态大规模语言模型算法原理与实践

概述 大规模语言模型在理解和生成人类语言方面具有非凡的能力,但迄今为止,它们的能力主要局限于文本处理。然而,现实世界是一个多模式的环境,信息通过视觉、听觉和触觉等多种感官进行交换。融入这种多样性是开发下一代系统的主要…

云原生Kubernetes: K8S 1.29版本 部署Jenkins

目录 一、实验 1.环境 2.K8S 1.29版本 部署Jenkins 服务 3.jenkins安装Kubernetes插件 二、问题 1.创建pod失败 2.journalctl如何查看日志信息 2.容器内如何查询jenkins初始密码 3.jenkins离线安装中文包报错 4.jenkins插件报错 一、实验 1.环境 (1&…

上位机图像处理和嵌入式模块部署(树莓派4b固件功能设计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,上位机的功能都是基于插件进行开发的。但是上位机的成本比较贵,一般的企业不一定愿意接接受。这个时候另外一…

【第三版 系统集成项目管理工程师】 十五至尊图

持续更新。。。。。。。。。。。。。。。 【第三版】十五至尊图 十五至尊图【必会】1.整合(7)2.范围 (6)3.进度 (6)4.成本 (4)5.质量(3)6.资源(6&…

【LeetCode: 3117. 划分数组得到最小的值之和 + 动态规划】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Jmeter 测试Dubbo接口-实例

1、Dubbo插件准备 ①把jmeter-plugins-dubbo-2.7.4.1-jar-with-dependencies.jar包放在D:\apache-jmeter-5.5\lib\ext目录 ②重新打开Jmeter客户端 在线程组-添加-取样器-dubbo simple,添加dubbo接口请求 2、Jmeter测试lottery接口 ①配置zookeeper参数 由于dub…

【蓝桥杯嵌入式】蓝桥杯嵌入式第十四届省赛程序真题,真题分析与代码讲解

🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都已更新完毕,欢迎大家前往订阅本专题🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥…

在PostgreSQL中如何处理大对象(Large Objects),例如存储和检索二进制文件?

文章目录 存储二进制文件为大对象步骤 1:创建一个大对象步骤 2:写入数据到大对象 检索大对象为二进制文件步骤 1:打开大对象以进行读取步骤 2:从大对象读取数据 注意事项 PostgreSQL 提供了对大对象(Large Objects&…

2024蓝桥杯省赛C++软件算法研究生组题解(含代码)+游记

A题 给你一个音游的游戏记录log.txt&#xff0c;判断玩家的最高连击数 题解 水题&#xff0c;但是要小心&#xff0c;miss的键需要重置k0&#xff0c;超时但正确的键重置k1 个人答案是9 代码&#xff1a; #include<cstdio> #include<cstring> #include<al…

高可用集群——keepalived

目录 1 高可用的概念 2 心跳监测与漂移 IP 地址 3 Keepalived服务介绍 4 Keepalived故障切换转移原理介绍 5 Keepalived 实现 Nginx 的高可用集群 5.1 项目背景 5.2 项目环境 5.3 项目部署 5.3.1 web01\web02配置&#xff1a; 5.3.2nginx负载均衡配置 5.3.3 主调度服…