首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Python-VBA函数之旅-enumerate函数

  • 25-03-03 04:23
  • 3721
  • 6148
blog.csdn.net

目录

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. # 1.函数:enumerate
  2. # 2.功能:
  3. # 2-1、将一个可迭代的对象组合为一个带有数据和数据下标的索引序列,返回一个枚举类型
  4. # 2-2、将一个可迭代的对象组合为一个带有数据和数据索引的序列,返回一个枚举类型
  5. # 3.语法:
  6. # 3-1、enumerate(iterable, start=0)
  7. # 3-2、for index, item in enumerate(listname):
  8. # 输出index和item
  9. # 4.参数:
  10. # 4-1. iterable:必需参数,一个可迭代对象,如列表、元组、字符串等
  11. # start:可选参数,用于指定计数的起始值,默认为0
  12. # 4-2. index:用于保存元素的索引
  13. # item:用于保存获取到的元素值,要输出元素内容时,直接输出该变量即可
  14. # listname:序列名称
  15. # 5.返回值:返回一个枚举对象
  16. # 6.说明:
  17. # 7.示例:
  18. # 应用1:索引处理
  19. # 使用enumerate函数遍历列表,并设置起始值为1
  20. fruits = ['apple', 'banana', 'orange']
  21. for index, fruit in enumerate(fruits, start=1):
  22. print(f"Index: {index}, Fruit: {fruit}")
  23. # Index: 1, Fruit: apple
  24. # Index: 2, Fruit: banana
  25. # Index: 3, Fruit: orange
  26. # 反转索引
  27. my_list = ['a', 'b', 'c', 'd']
  28. for index, value in enumerate(reversed(my_list), start=1):
  29. reversed_index = len(my_list) - index + 1
  30. print(f"Reversed Index: {reversed_index}, Value: {value}")
  31. # Reversed Index: 4, Value: d
  32. # Reversed Index: 3, Value: c
  33. # Reversed Index: 2, Value: b
  34. # Reversed Index: 1, Value: a
  35. # 应用2:遍历操作
  36. # 遍历列表并获取索引和值
  37. fruits = ['apple', 'banana', 'orange']
  38. for index, fruit in enumerate(fruits, start=1):
  39. print(f"Index: {index}, Fruit: {fruit}")
  40. # Index: 1, Fruit: apple
  41. # Index: 2, Fruit: banana
  42. # Index: 3, Fruit: orange
  43. # 遍历文件并跟踪行号
  44. with open('file.txt', 'r') as file:
  45. for line_number, line in enumerate(file, start=1):
  46. print(f"Line {line_number}: {line.strip()}")
  47. # Line 1: 1111
  48. # Line 2: 2222
  49. # Line 3: 3333
  50. # Line 4: 4444
  51. # 遍历字典的键和值
  52. my_dict = {'a': 1, 'b': 2, 'c': 3}
  53. for index, (key, value) in enumerate(my_dict.items()):
  54. print(f"Index: {index}, Key: {key}, Value: {value}")
  55. # Index: 0, Key: a, Value: 1
  56. # Index: 1, Key: b, Value: 2
  57. # Index: 2, Key: c, Value: 3
  58. # 遍历字符串并处理字符位置
  59. text = "Myelsa"
  60. for index, char in enumerate(text):
  61. print(f"字符位置{index}: {char}")
  62. # 字符位置0: M
  63. # 字符位置1: y
  64. # 字符位置2: e
  65. # 字符位置3: l
  66. # 字符位置4: s
  67. # 字符位置5: a
  68. # 应用3:位置跟踪
  69. data = [3, 5, 6, 8, 10, 11, 24]
  70. target_value = 24
  71. for index, value in enumerate(data):
  72. if value == target_value:
  73. print(f"Found {target_value} at index {index}")
  74. break
  75. # Found 24 at index 6
  76. # 应用4:图形可视化
  77. # 假设这是我们的游戏对象类
  78. class GameObject:
  79. def __init__(self, name, x, y):
  80. self.name = name
  81. self.x = x
  82. self.y = y
  83. def __str__(self):
  84. return f"{self.name} at ({self.x}, {self.y})"
  85. if __name__ == '__main__':
  86. # 创建游戏对象列表
  87. game_objects = [
  88. GameObject("Object 1", 1, 2),
  89. GameObject("Object 2", 3, 4),
  90. GameObject("Object 3", 5, 6),
  91. # ... 更多游戏对象
  92. ]
  93. # 使用 enumerate 函数遍历游戏对象列表,并打印位置和名称
  94. for index, obj in enumerate(game_objects):
  95. print(f"Object at index {index}: {obj}")
  96. # 如果我们想要进行更复杂的操作,比如移动对象或检查碰撞,我们可以在循环内部添加逻辑
  97. for index, obj in enumerate(game_objects):
  98. # 假设我们移动每个对象到新的位置
  99. new_x = obj.x + 1 # 例如,向右移动一个单位
  100. new_y = obj.y + 1 # 例如,向下移动一个单位
  101. obj.x = new_x
  102. obj.y = new_y
  103. print(f"Moved {obj.name} to ({new_x}, {new_y})")
  104. # 打印移动后的对象位置
  105. for index, obj in enumerate(game_objects):
  106. print(f"Object at index {index} after moving: {obj}")
  107. # Object at index 0: Object 1 at (1, 2)
  108. # Object at index 1: Object 2 at (3, 4)
  109. # Object at index 2: Object 3 at (5, 6)
  110. # Moved Object 1 to (2, 3)
  111. # Moved Object 2 to (4, 5)
  112. # Moved Object 3 to (6, 7)
  113. # Object at index 0 after moving: Object 1 at (2, 3)
  114. # Object at index 1 after moving: Object 2 at (4, 5)
  115. # Object at index 2 after moving: Object 3 at (6, 7)
  116. # 应用5:多重枚举
  117. names = ['Myelsa', 'Bruce', 'Jimmy']
  118. ages = [18, 6, 15]
  119. for index, (name, age) in enumerate(zip(names, ages), start=1):
  120. print(f"Index: {index}, Name: {name}, Age: {age}")
  121. # Index: 1, Name: Myelsa, Age: 18
  122. # Index: 2, Name: Bruce, Age: 6
  123. # Index: 3, Name: Jimmy, Age: 15
  124. # 应用6:条件枚举
  125. # 枚举时跳过某些元素
  126. my_list = [1, 2, 3, 4, 5]
  127. for index, value in enumerate(my_list):
  128. if value % 2 == 0: # 跳过偶数
  129. continue
  130. print(f"Index: {index}, Value: {value}")
  131. # Index: 0, Value: 1
  132. # Index: 2, Value: 3
  133. # Index: 4, Value: 5
  134. # 枚举时使用自定义的索引函数
  135. def custom_index(iterable):
  136. for i in range(len(iterable)):
  137. yield i**2 # 使用平方作为索引
  138. if __name__ == '__main__':
  139. my_list = ['a', 'b', 'c', 'd']
  140. for index, value in zip(custom_index(my_list), my_list):
  141. print(f"Custom Index: {index}, Value: {value}")
  142. # Custom Index: 0, Value: a
  143. # Custom Index: 1, Value: b
  144. # Custom Index: 4, Value: c
  145. # Custom Index: 9, Value: d
  146. # 枚举时同时获取前一个和下一个元素
  147. # 假设我们有一个列表
  148. data = ['a', 'b', 'c', 'd', 'e']
  149. # 初始化前一个元素为 None,因为在列表的第一个元素之前没有元素
  150. prev_element = None
  151. # 遍历列表,除了最后一个元素
  152. for index, current_element in enumerate(data[:-1]): # 使用切片排除最后一个元素
  153. # 获取后一个元素
  154. next_element = data[index + 1]
  155. # 打印结果
  156. print(f"Previous Element: {prev_element}, Current Element: {current_element}, Next Element: {next_element}")
  157. # 更新前一个元素为当前元素,以便在下一次循环中使用
  158. prev_element = current_element
  159. # 注意:最后一个元素没有后一个元素,所以上面的循环没有处理它。
  160. # 如果你需要处理最后一个元素(尽管它没有后一个元素),你可以单独处理它:
  161. if data: # 确保列表不为空
  162. last_index = len(data) - 1
  163. last_element = data[last_index]
  164. print(f"Last Element: {last_element}, No Next Element")
  165. # Previous Element: None, Current Element: a, Next Element: b
  166. # Previous Element: a, Current Element: b, Next Element: c
  167. # Previous Element: b, Current Element: c, Next Element: d
  168. # Previous Element: c, Current Element: d, Next Element: e
  169. # Last Element: e, No Next Element
  170. # 枚举时动态添加步长
  171. my_list = ['a', 'b', 'c', 'd', 'e']
  172. for index, value in enumerate(my_list[::2]):
  173. print(f"Index: {index}, Value: {value}")
  174. # Index: 0, Value: a
  175. # Index: 1, Value: c
  176. # Index: 2, Value: e
  177. # 应用7:配合其他函数或对象使用
  178. # 与zip()函数一起组合
  179. names = ['Myelsa', 'Bruce', 'Jimmy']
  180. ages = [18, 6, 15]
  181. for index, (name, age) in enumerate(zip(names, ages), start=1):
  182. print(f"Index: {index}, Name: {name}, Age: {age}")
  183. # Index: 1, Name: Myelsa, Age: 18
  184. # Index: 2, Name: Bruce, Age: 6
  185. # Index: 3, Name: Jimmy, Age: 15
  186. # 与map()函数一起组合
  187. my_list = ['a', 'b', 'c']
  188. indexed_list = list(map(lambda x: (x[0], x[1].upper()), enumerate(my_list)))
  189. print(indexed_list)
  190. # [(0, 'A'), (1, 'B'), (2, 'C')]
  191. # 与filter()函数一起组合
  192. my_list = ['a', 'b', 'c']
  193. filtered_list = list(filter(lambda x: x[0] % 2 == 0, enumerate(my_list)))
  194. print(filtered_list)
  195. # [(0, 'a'), (2, 'c')]
  196. # 列表推导式(List comprehension)
  197. my_list = ['a', 'b', 'c']
  198. new_list = [(index, value) for index, value in enumerate(my_list)]
  199. print(new_list)
  200. # [(0, 'a'), (1, 'b'), (2, 'c')]
  201. # 与sorted()函数一起组合
  202. my_list = ['c', 'a', 'b']
  203. sorted_enum = sorted(enumerate(my_list), key=lambda x: x[1])
  204. for index, value in sorted_enum:
  205. print(f"Index: {index}, Value: {value}")
  206. # Index: 1, Value: a
  207. # Index: 2, Value: b
  208. # Index: 0, Value: c
  209. # 与Pandas的配合使用
  210. import pandas as pd
  211. # 创建一个简单的 DataFrame
  212. data = {'Name': ['Myelsa', 'Bruce', 'Jimmy'],
  213. 'Age': [18, 6, 15],
  214. 'City': ['Guangzhou', 'Foshan', 'Zhuhai']}
  215. df = pd.DataFrame(data)
  216. # 使用enumerate和iterrows()遍历DataFrame的行
  217. for index, row in enumerate(df.iterrows()):
  218. i, row_data = row # row 是一个包含索引和行的元组
  219. print(f"Row {index} (Index: {i}):")
  220. for column, value in row_data.items():
  221. print(f" {column}: {value}")
  222. # 如果你只需要遍历索引和列名,可以使用iteritems()
  223. for index, (column_name, column_data) in enumerate(df.items()):
  224. print(f"Column {index}: {column_name}")
  225. print(" Values:", column_data.tolist())
  226. # Row 0 (Index: 0):
  227. # Name: Myelsa
  228. # Age: 18
  229. # City: Guangzhou
  230. # Row 1 (Index: 1):
  231. # Name: Bruce
  232. # Age: 6
  233. # City: Foshan
  234. # Row 2 (Index: 2):
  235. # Name: Jimmy
  236. # Age: 15
  237. # City: Zhuhai
  238. # Column 0: Name
  239. # Values: ['Myelsa', 'Bruce', 'Jimmy']
  240. # Column 1: Age
  241. # Values: [18, 6, 15]
  242. # Column 2: City
  243. # 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博客
文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览61070 人正在系统学习中
遨游码海,我心飞扬
微信名片
注:本文转载自blog.csdn.net的神奇夜光杯的文章"https://myelsa1024.blog.csdn.net/article/details/137815435"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top