当前位置:   article > 正文

Python-VBA函数之旅-map函数_vba map函数

vba map函数

目录

一、map函数的常见应用场景

二、map函数使用注意事项

三、如何用好map函数?

1、map函数:

1-1、Python:

1-2、VBA:

2、推荐阅读:

个人主页:神奇夜光杯-CSDN博客 



一、map函数的常见应用场景

        map函数在Python中非常有用,它提供了一种简洁的方式来对序列中的每个元素应用一个函数,常见的应用场景有:

1、数据转换:假设你有一个整数列表,你想将它们都转换为字符串,使用map()函数可以很容易地完成这个任务。

2、字符串处理:如果你有一个字符串列表,并想要将每个字符串转换为大写,可以使用map()函数轻松实现。

3、过滤和筛选:尽管map()函数主要用于转换,但结合条件表达式(如lambda函数中的if语句),它也可以用于过滤或筛选数据。例如,过滤出一个列表中所有的偶数。

4、与其他函数结合使用:map()函数可以与Python的其他内置函数或自定义函数一起使用,以实现更复杂的操作。例如,结合reduce()函数计算列表中所有数字的和。

5、并行处理多个序列:当你有多个序列,并且想要并行地对它们中的元素执行操作时,map()函数非常有用。例如,合并两个列表中的对应元素。

6、读取和处理文件数据:当从文件中读取数据时,可以使用map()函数来处理每一行数据。

7、结合可迭代对象使用:然map()函数最常用于处理列表,但它也可以与其他可迭代对象一起使用,如字典和集合。例如,你可以使用map()函数来更新字典中所有值。

8、替代循环:在某些情况下,使用map()函数可以使代码更简洁,避免显式的循环,这在函数式编程风格中特别常见,它倾向于使用高阶函数来操作数据,而不是使用显式的循环结构。

9、数学运算:你可以使用map()函数对列表中的每个元素执行数学运算。例如,计算列表中每个元素的平方。

        总之,map()函数在Python中是一个强大的工具,可以用于各种序列处理任务,特别是当你需要对序列中的每个元素应用相同的函数时。

二、map函数使用注意事项

        在Python中,map()函数是一个内置的高阶函数,用于将一个函数应用于一个或多个可迭代对象(如列表、元组等)的每个元素,并返回一个新的迭代器,其中包含应用函数后的结果。在使用map()函数时,需要注意以下几点:

1、参数类型:第一个参数应该是一个函数对象,可以是Python内置函数,也可以是用户自定义的函数;第二个及后续参数应该是一个或多个可迭代对象。

2、返回类型:在Python 3中,map()函数返回的是一个迭代器对象,而不是列表。如果你想要得到一个列表,需要将迭代器转换为列表,例如使用list()函数;在Python 2中,map()函数直接返回列表,但这一行为在Python 3中已被改变。

3、不改变原序列:map()函数不会修改原始的可迭代对象,而是返回一个新的迭代器。

4、处理异常:如果传入的函数在处理可迭代对象的元素时抛出异常,那么map()函数也会抛出该异常。因此,在使用map()函数时,需要确保传入的函数能够妥善处理可能出现的异常。

5、内存使用:由于map()返回的是迭代器,它在处理大量数据时具有内存优势,因为它不需要一次性将所有结果加载到内存中,这有助于处理大型数据集,减少内存消耗。

6、可迭代对象的长度:当对多个可迭代对象使用map()函数时,如果它们的长度不同,map()函数将在最短的可迭代对象耗尽时停止迭代,因此,要确保传入的可迭代对象具有相同的长度,或者能够妥善处理长度不一致的情况。

7、惰性加载特性:由于map()返回的是一个迭代器,因此它的计算是惰性的,即只有在需要时才会计算结果,这可以提高性能,特别是在处理大型数据集时。

8、线程安全:在多线程环境中使用map()函数时,需要注意线程安全问题。由于map()函数本身不是线程安全的,因此在多线程环境中使用时需要采取适当的同步措施。

        总之,只有遵循这些注意事项,你才能更有效地使用map()函数,并避免常见的错误和问题。

 

三、如何用好map函数?

        在Python中,map()函数是一个内置的高阶函数,用于将一个函数应用于一个或多个可迭代对象(如列表、元组等)的每个元素,并返回一个新的迭代器。为了用好map()函数,你需遵循以下建议:

1、理解map()函数的参数:第一个参数是一个函数,它将被应用于每个元素;第二个及之后的参数是可迭代对象,它们的元素将被传递给函数。

2、使用lambda表达式进行简单操作:对于简单的元素转换,你可以使用lambda表达式作为map()函数的第一个参数;Lambda表达式允许你定义一个匿名函数,直接在map()函数中使用。

3、使用已定义的函数:除了lambda表达式,你也可以使用已定义的函数作为map()的第一个参数,这在转换逻辑较复杂时特别有用。

4、处理多个可迭代对象:map()函数也可以接受多个可迭代对象,并将函数应用于它们中对应位置的元素,这在你需要对多个列表执行相同操作并获取结果时非常有用。

5、替代显式循环:在某些情况下,使用map()函数可以替代显式的循环,使代码更简洁易读,然而,请注意,当处理大型数据集时,显式循环可能具有更好的性能。

6、结合其他高阶函数:你可以将map()函数与其他高阶函数(如filter()和reduce())结合使用,以执行更复杂的操作,这允许你构建一系列的数据处理步骤。

7、返回值处理:记住map()函数返回的是一个迭代器,如果你需要一个列表或其他类型的集合,你需要将迭代器转换为相应的类型。

        总之,只有通过遵循这些建议和最佳实践,你才能更有效地利用Python中的map()函数来处理数据和执行复杂的操作。

 

1、map函数
1-1、Python:
  1. # 1.函数:map
  2. # 2.功能:用于将一个函数应用于一个或多个可迭代对象(如列表、元组等)的每个元素,并返回一个新的迭代器,即通过函数实现对可迭代对象的操作
  3. # 3.语法:map(function, iterable, *iterables)
  4. # 4.参数:
  5. # 4-1、function:必须参数,表示函数
  6. # 4-2、iterable(s):一个或多个可迭代对象,至少保证有1个
  7. # 5.返回值:返回一个将function应用于iterable(s)的每一项,并产生其结果的迭代器
  8. # 6.说明:
  9. # 6-1、map()函数在Python 2.x返回得是列表,而在Python 3.x中返回得是可迭代器对象
  10. # 6-2、当map()函数传入多个可迭代对象时,参数function必须能够接收足够多的参数,以保证每个可迭代对象同一索引的值均能正确传入函数,否则将提示TypeError异常
  11. # 7.示例:
  12. # 用dir()函数获取该函数内置的属性和方法
  13. print(dir(map))
  14. # ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__',
  15. # '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__',
  16. # '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
  17. # 用help()函数获取该函数的文档信息
  18. help(map)
  19. # 应用一:数据转换
  20. # 示例1:将列表中的每个元素乘以一个常数
  21. # 定义一个函数,将元素乘以常数2
  22. def multiply_by_two(x):
  23. return x * 2
  24. # 创建一个数字列表
  25. numbers = [1, 2, 3, 4, 5]
  26. # 使用map()函数将每个元素乘以 2
  27. doubled_numbers = map(multiply_by_two, numbers)
  28. # 将迭代器转换为列表以查看结果
  29. doubled_numbers_list = list(doubled_numbers)
  30. print(doubled_numbers_list)
  31. # [2, 4, 6, 8, 10]
  32. # 示例2:将字符串列表转换为大写
  33. # 创建一个字符串列表
  34. strings = ['myelsa', 'jimmy', 'python', 'bruce']
  35. # 使用map()函数和内置的str.upper()方法将每个字符串转换为大写
  36. uppercase_strings = map(str.upper, strings)
  37. # 将迭代器转换为列表以查看结果
  38. uppercase_strings_list = list(uppercase_strings)
  39. print(uppercase_strings_list)
  40. # ['MYELSA', 'JIMMY', 'PYTHON', 'BRUCE']
  41. # 示例3:计算列表中每个字符串的长度
  42. # 创建一个字符串列表
  43. strings = ['apple', 'banana', 'cherry', 'date']
  44. # 使用map()函数和内置的len()函数计算每个字符串的长度
  45. lengths = map(len, strings)
  46. # 将迭代器转换为列表以查看结果
  47. lengths_list = list(lengths)
  48. print(lengths_list)
  49. # [5, 6, 6, 4]
  50. # 示例4:将两个列表中的元素相加(假设它们长度相同)
  51. # 定义两个列表
  52. list1 = [3, 5, 6]
  53. list2 = [8, 10, 11]
  54. # 使用map()函数和lambda表达式将两个列表中的对应元素相加
  55. sums = map(lambda x, y: x + y, list1, list2)
  56. # 将迭代器转换为列表以查看结果
  57. sums_list = list(sums)
  58. print(sums_list)
  59. # [11, 15, 17]
  60. # 示例5:将两个列表中的元素相加(假设它们长度不相同)
  61. # 定义两个列表
  62. list1 = [3, 5, 6]
  63. list2 = [8, 10]
  64. # 使用map()函数和lambda表达式将两个列表中的对应元素相加
  65. sums = map(lambda x, y: x + y, list1, list2)
  66. # 将迭代器转换为列表以查看结果
  67. sums_list = list(sums)
  68. print(sums_list)
  69. # [11, 15]
  70. # 示例6:使用多个可迭代对象作为map()的参数
  71. # 定义两个函数
  72. def add(x, y):
  73. return x + y
  74. def multiply(x, y):
  75. return x * y
  76. # 创建两个数字列表
  77. numbers1 = [1, 2, 3]
  78. numbers2 = [4, 5, 6]
  79. # 使用map()函数和lambda表达式,将两个函数应用于两个列表的对应元素
  80. results_add = map(lambda x, y: add(x, y), numbers1, numbers2)
  81. results_mul = map(lambda x, y: multiply(x, y), numbers1, numbers2)
  82. # 将迭代器转换为列表以查看结果
  83. results_add_list = list(results_add)
  84. results_mul_list = list(results_mul)
  85. print(results_add_list)
  86. print(results_mul_list)
  87. # [5, 7, 9]
  88. # [4, 10, 18]
  89. # 应用二:字符串处理
  90. # 示例1:将字符串列表中的每个字符串转换为大写
  91. # 定义一个字符串列表
  92. strings = ['hello', 'world', 'python']
  93. # 使用map()函数和内置的str.upper()方法将每个字符串转换为大写
  94. uppercase_strings = map(str.upper, strings)
  95. # 将迭代器转换为列表以查看结果
  96. uppercase_strings_list = list(uppercase_strings)
  97. print(uppercase_strings_list)
  98. # ['HELLO', 'WORLD', 'PYTHON']
  99. # 示例2:将字符串列表中的每个字符串的长度计算出来
  100. # 定义一个字符串列表
  101. strings = ['apple', 'banana', 'cherry']
  102. # 使用map()函数和内置的len()函数计算每个字符串的长度
  103. lengths = map(len, strings)
  104. # 将迭代器转换为列表以查看结果
  105. lengths_list = list(lengths)
  106. print(lengths_list)
  107. # [5, 6, 6]
  108. # 示例3:将字符串列表中的每个字符串的首字母转换为大写(其余小写)
  109. # 定义一个字符串列表
  110. strings = ['hello', 'WORLD', 'python']
  111. # 定义一个函数,将字符串的首字母转换为大写,其余转换为小写
  112. def capitalize_first_letter(s):
  113. return s.capitalize()
  114. # 使用map()函数将每个字符串的首字母转换为大写
  115. capitalized_strings = map(capitalize_first_letter, strings)
  116. # 将迭代器转换为列表以查看结果
  117. capitalized_strings_list = list(capitalized_strings)
  118. print(capitalized_strings_list)
  119. # ['Hello', 'World', 'Python']
  120. # 示例4:过滤字符串列表中的空字符串
  121. # 定义一个包含空字符串的字符串列表
  122. strings = ['apple', '', 'banana', '', 'cherry']
  123. # 使用map()函数和filter()函数过滤掉空字符串
  124. non_empty_strings = map(str.strip, filter(None, strings))
  125. # 将迭代器转换为列表以查看结果
  126. non_empty_strings_list = list(non_empty_strings)
  127. print(non_empty_strings_list)
  128. # ['apple', 'banana', 'cherry']
  129. # 示例5:将字符串列表中的每个字符串拆分为字符列表
  130. # 定义一个字符串列表
  131. strings = ['myelsa', 'jimmy', 'bruce']
  132. # 使用map()函数和内置的list()函数将每个字符串拆分为字符列表
  133. char_lists = map(list, strings)
  134. # 将迭代器转换为列表以查看结果
  135. char_lists_list = list(char_lists)
  136. print(
  137. char_lists_list)
  138. # [['m', 'y', 'e', 'l', 's', 'a'], ['j', 'i', 'm', 'm', 'y'], ['b', 'r', 'u', 'c', 'e']]
  139. # 应用三:过滤和筛选
  140. # 示例1:使用map()和条件表达式过滤出非零元素
  141. # 定义一个包含零和非零元素的数字列表
  142. numbers = [0, 1, 2, 0, 3, 0, 4, 5, 0]
  143. # 使用map()函数和条件表达式过滤出非零元素
  144. non_zero_numbers = map(lambda x: x if x != 0 else None, numbers)
  145. # 使用filter()函数去除None值
  146. non_zero_numbers_filtered = filter(None.__ne__, non_zero_numbers)
  147. # 将迭代器转换为列表以查看结果
  148. non_zero_numbers_list = list(non_zero_numbers_filtered)
  149. print(non_zero_numbers_list)
  150. # [1, 2, 3, 4, 5]
  151. # 示例2:使用map()和filter()筛选字符串列表中的非空字符串
  152. # 定义一个包含空字符串的字符串列表
  153. strings = ['apple', '', 'banana', ' ', 'cherry']
  154. # 使用map()函数和strip()方法去除字符串两端的空白字符
  155. stripped_strings = map(str.strip, strings)
  156. # 使用filter()函数和lambda表达式过滤掉空字符串
  157. non_empty_strings = filter(None, stripped_strings)
  158. # 将迭代器转换为列表以查看结果
  159. non_empty_strings_list = list(non_empty_strings)
  160. print(non_empty_strings_list)
  161. # ['apple', 'banana', 'cherry']
  162. # 应用四:与其他函数结合使用
  163. # 示例1:使用map()与内置函数abs()计算列表中每个数的绝对值
  164. # 定义一个包含正负数的列表
  165. numbers = [-1, 2, -3, 4, -5]
  166. # 使用map()函数和abs()函数计算每个数的绝对值
  167. absolute_values = map(abs, numbers)
  168. # 将迭代器转换为列表以查看结果
  169. absolute_values_list = list(absolute_values)
  170. print(absolute_values_list)
  171. # [1, 2, 3, 4, 5]
  172. # 示例2:使用map()与自定义函数计算列表中每个数的平方
  173. # 定义一个自定义函数,计算一个数的平方
  174. def square(x):
  175. return x ** 2
  176. # 定义一个数字列表
  177. numbers = [1, 2, 3, 4, 5]
  178. # 使用map()函数和自定义的square()函数计算每个数的平方
  179. squares = map(square, numbers)
  180. # 将迭代器转换为列表以查看结果
  181. squares_list = list(squares)
  182. print(squares_list)
  183. # [1, 4, 9, 16, 25]
  184. # 示例3:使用map()结合两个函数处理字符串列表
  185. # 定义一个字符串列表
  186. strings = [' apple ', ' banana ', ' cherry ']
  187. # 定义一个函数,用于去除字符串两端的空白字符
  188. def strip_spaces(s):
  189. return s.strip()
  190. # 定义一个函数,用于将字符串转换为大写
  191. def to_uppercase(s):
  192. return s.upper()
  193. # 使用map()函数结合两个函数处理字符串列表
  194. processed_strings = map(to_uppercase, map(strip_spaces, strings))
  195. # 将迭代器转换为列表以查看结果
  196. processed_strings_list = list(processed_strings)
  197. print(processed_strings_list)
  198. # ['APPLE', 'BANANA', 'CHERRY']
  199. # 示例4:使用map()与lambda表达式计算列表中每个元素的幂
  200. # 定义一个数字列表
  201. numbers = [1, 2, 3, 4, 5]
  202. # 使用map()函数和lambda表达式计算每个数的三次幂
  203. cubes = map(lambda x: x ** 3, numbers)
  204. # 将迭代器转换为列表以查看结果
  205. cubes_list = list(cubes)
  206. print(cubes_list)
  207. # [1, 8, 27, 64, 125]
  208. # 应用五:并行处理多个序列
  209. # 示例1:对两个列表中的元素进行相加
  210. # 定义两个数字列表
  211. list1 = [1, 2, 3]
  212. list2 = [4, 5, 6]
  213. # 使用zip()将两个列表的元素配对,然后使用map()和lambda表达式进行相加
  214. sum_list = map(lambda x, y: x + y, list1, list2)
  215. # 将迭代器转换为列表以查看结果
  216. sum_list_result = list(sum_list)
  217. print(sum_list_result)
  218. # [5, 7, 9]
  219. # 示例2:使用自定义函数处理多个列表中的元素
  220. # 定义一个自定义函数,用于计算两个数的乘积并返回结果
  221. def multiply(x, y):
  222. return x * y
  223. # 定义两个数字列表
  224. list1 = [1, 2, 3]
  225. list2 = [4, 5, 6]
  226. # 使用zip()将两个列表的元素配对,然后使用map()和自定义函数进行相乘
  227. product_list = map(multiply, list1, list2)
  228. # 将迭代器转换为列表以查看结果
  229. product_list_result = list(product_list)
  230. print(product_list_result)
  231. # [4, 10, 18]
  232. # 应用六:读取和处理文件数据
  233. # 示例1:读取文件中的数据,并使用map()转换为整数列表
  234. # 打开文件并读取所有行
  235. with open('file.txt', 'r') as file:
  236. lines = file.readlines()
  237. # 使用map()和str.split()以及int()将每一行的数字转换为整数列表
  238. # 注意:这里假设每行都只有一个数字,如果有多个数字,你需要进一步处理
  239. numbers_list = list(map(int, ''.join(lines).split()))
  240. print(numbers_list)
  241. # [121314536273838390, 123, 456, 789, 587, 1024]
  242. # 示例2:读取文件中的字符串,并使用map()和自定义函数处理它们
  243. # 定义一个函数,将字符串转换为大写
  244. def to_uppercase(s):
  245. return s.upper()
  246. # 打开文件并读取所有行
  247. with open('file.txt', 'r') as file:
  248. lines = file.readlines()
  249. # 使用map()和自定义函数将每行转换为大写
  250. # 注意:这里假设每行都只有一个单词,如果有多个单词,你需要进一步处理
  251. upper_words = list(map(to_uppercase, lines))
  252. # 如果你想将每行的所有单词都转换为大写,可以使用列表推导式
  253. upper_words_all = [word.upper() for line in lines for word in line.split()]
  254. print(upper_words)
  255. print(upper_words_all)
  256. # ['121314536273838390\n', '123A\n', '456B\n', '789C\n', '587\n', '1024']
  257. # ['121314536273838390', '123A', '456B', '789C', '587', '1024']
  258. # 示例3:读取文件中的每行,并使用map()处理每个单词
  259. # 定义一个函数,返回字符串的长度
  260. def get_length(s):
  261. return len(s)
  262. # 打开文件并读取所有行
  263. with open('file.txt', 'r') as file:
  264. lines = file.readlines()
  265. # 使用map()和自定义函数计算每行中每个单词的长度
  266. # 这里我们使用了嵌套的map()和split(),以及列表推导式来展开结果
  267. word_lengths = [list(map(get_length, line.split())) for line in lines]
  268. # 打印每个单词的长度列表
  269. for lengths in word_lengths:
  270. print(lengths)
  271. # [18]
  272. # [4]
  273. # [4]
  274. # [4]
  275. # [3]
  276. # [4]
  277. # 应用七:结合可迭代对象使用
  278. # 示例1:对三个列表中的元素进行运算
  279. # 定义三个数字列表
  280. list1 = [1, 2, 3]
  281. list2 = [4, 5, 6]
  282. list3 = [7, 8, 9]
  283. # 使用zip()将三个列表的元素配对,然后使用map()和自定义函数进行计算
  284. def calculate(a, b, c):
  285. return a + b * c
  286. results = map(calculate, list1, list2, list3)
  287. # 将迭代器转换为列表以查看结果
  288. result_list = list(results)
  289. print(result_list)
  290. # [29, 42, 57]
  291. # 示例2:使用多个可迭代对象进行格式化字符串
  292. # 定义多个列表
  293. names = ['Myelsa', 'Jimmy', 'Bruce']
  294. ages = [48, 35, 60]
  295. occupations = ['Engineer', 'Doctor', 'Teacher']
  296. # 使用zip()将这些列表的元素配对,然后使用map()和格式化字符串来创建描述
  297. descriptions = map(lambda name, age, occupation: f'{name} is a {age} year old {occupation}.', names, ages, occupations)
  298. # 将迭代器转换为列表以查看结果
  299. description_list = list(descriptions)
  300. print(description_list)
  301. # ['Myelsa is a 48 year old Engineer.', 'Jimmy is a 35 year old Doctor.', 'Bruce is a 60 year old Teacher.']
  302. # 应用八:数学运算
  303. # 示例1:对列表中的每个元素应用自定义数学函数
  304. # 定义一个自定义数学函数,计算一个数的立方根
  305. def cube_root(x):
  306. return x ** (1 / 3)
  307. # 定义一个数字列表
  308. numbers = [8, 27, 64, 125, 216]
  309. # 使用map()和自定义函数计算每个元素的立方根
  310. cube_roots = map(cube_root, numbers)
  311. # 将迭代器转换为列表以查看结果
  312. cube_roots_list = list(cube_roots)
  313. print(cube_roots_list)
  314. # [2.0, 3.0, 3.9999999999999996, 5.0, 5.999999999999999]
  315. # 示例4:使用map()对列表中的元素进行求和与求平均值
  316. # 定义一个数字列表
  317. numbers = [1, 2, 3, 4, 5]
  318. # 使用map()和sum()计算列表元素的和
  319. sum_of_numbers = sum(numbers)
  320. # 使用len()和sum()计算列表元素的平均值(这里不使用map(),因为map()不适合这种聚合操作)
  321. average_of_numbers = sum_of_numbers / len(numbers)
  322. print(sum_of_numbers)
  323. print(average_of_numbers)
  324. # 15
  325. # 3.0
1-2、VBA
略,待后补。
2、推荐阅读:

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

Python算法之旅:Algorithm

Python函数之旅:Functions

个人主页:神奇夜光杯-CSDN博客 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/719054
推荐阅读
相关标签
  

闽ICP备14008679号