首页 最新 热门 推荐

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

Python-VBA函数之旅-max函数

  • 25-03-03 04:24
  • 2877
  • 7325
blog.csdn.net

目录

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

二、max函数使用注意事项

三、如何用好max函数?

1、max函数:

1-1、Python:

1-2、VBA:

2、推荐阅读:

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



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

        max()函数是 Python 中的一个内置函数,它用于返回可迭代对象中的最大值。常见的应用场景有:

1、查找最大值:这是max()函数最直接的应用,你可以使用它来查找列表中/字典中/多个值中/默认排序不可行的对象中/嵌套结构中的最大值。

2、使用自定义函数:你可以通过key参数传递一个函数给max(),该函数将应用于可迭代对象的每个元素,然后max()函数将返回使该函数结果最大的元素,这可以用于复杂对象的比较。

3、与生成器表达式结合使用:max()函数可以与生成器表达式结合使用,以在不需要完整列表的情况下找到最大值。

4、数据分析和处理:在处理大量数据时,经常需要找出最大值或最小值,max()函数在这方面非常有用,特别是在与pandas等数据处理库结合使用时。

5、算法与编程:在解决一些算法问题时,可能需要查找数组或列表中的最大值,max()函数可以简化这些操作,使代码更加简洁和易读。

        总之,max()函数在Python编程中有广泛的应用,可以帮助你快速找到可迭代对象中的最大值,简化代码并提高效率。

二、max函数使用注意事项

        在Python中使用max()函数时,需要注意以下事项:

1、参数类型:max()函数可以接受任意数量的参数,这些参数可以是数字、字符串、列表、元组或其他可迭代对象。但是,如果参数是不可迭代的,或者无法进行比较(例如,尝试比较数字和字符串),那么max()函数将抛出异常。

2、空迭代对象:如果传递给max()函数的迭代对象为空(例如空列表或空元组),max()函数将抛出ValueError异常,在尝试找到空集合中的最大值之前,你应该检查集合是否为空。

3、自定义对象:如果你尝试在自定义对象上使用max()函数,并且这些对象没有定义比较方法(如`__lt__()`、`__eq__()`等),Python将不知道如何比较它们,从而抛出TypeError异常;为了能够在自定义对象上使用max()函数,你需要确保这些对象实现了适当的比较方法。

4、使用key参数:当处理复杂对象或需要基于对象的某个属性或方法进行比较时,使用key参数非常有用,但是,你需要确保传递给key的参数是一个函数,该函数接受一个参数并返回一个用于比较的值。如果传递的不是函数,或者函数返回的值不可比较,max()函数将抛出异常。

5、效率问题:对于大型数据集,使用max()函数可能不是最高效的方法,特别是当数据集已经排序时,在这种情况下,你可能希望使用其他方法(如直接访问已排序列表的最后一个元素)来找到最大值,以提高效率。

6、与min()函数的区别:max()函数与min()函数在功能上相反,min()函数返回可迭代对象中的最小值,在使用时,请确保你选择了正确的函数来实现你的需求。

7、返回值:max()函数返回可迭代对象中的最大值,如果有多个元素具有相同的最大值,它将返回第一个找到的最大值。

        总之,了解这些注意事项可以帮助你更有效地使用max()函数,并避免在编程过程中遇到不必要的错误或问题。

三、如何用好max函数?

        在Python中,max()函数是一个非常实用的内置函数,用于找到可迭代对象中的最大值。要充分利用max()函数,你可以遵循以下一些建议和最佳实践:

1、理解基本用法:首先,你需要理解max()函数的基本用法,它可以接收任意数量的参数,并返回其中的最大值,这些参数可以是数字、字符串或其他可比较的对象。

2、使用可迭代对象:max()函数也可以接收一个可迭代对象(如列表、元组或集合)作为参数,并返回其中的最大值。

3、利用key参数:当处理复杂对象时,你可以使用key参数来指定一个函数,该函数将应用于可迭代对象的每个元素,并基于函数返回的结果找到最大值,这对于根据对象的某个属性或计算结果找到最大值非常有用。

4、处理自定义对象:对于自定义对象,你需要确保它们实现了适当的比较方法(如`__lt__()`、`__eq__()`等),以便max()函数能够正确比较它们。

5、处理空迭代对象:当传递给max()函数的迭代对象为空时,它会抛出ValueError异常;为了避免这种情况,你可以在调用max()之前检查迭代对象是否为空。

6、结合其他函数使用:max()函数可以与其他Python函数和特性结合使用,以实现更复杂的逻辑。例如,你可以使用列表推导式或生成器表达式来预处理数据,然后再传递给max()函数。

7、注意数据类型和比较规则:确保你传递给max()函数的数据类型是可比较的,并且比较规则符合你的预期;不同类型的对象(如数字和字符串)通常不能直接比较;如果需要比较不同类型的对象,你可能需要自定义比较逻辑。

        总之,只有通过遵循这些建议和最佳实践,你才能更好地利用Python中的max()函数,并在处理数据时实现更高效的查找最大值操作。

1、max函数:
1-1、Python:
  1. # 1.函数:max
  2. # 2.功能:用于获取传入的多个参数的最大值,或者传入的可迭代对象(或之中的元素)的最大值
  3. # 3.语法:
  4. # 3-1、max(iterable, *, key=None)
  5. # 3-2、max(iterable, *, default=None, key=None )
  6. # 3-3、max(arg1, arg2, *args, key=None)
  7. # 4.参数:
  8. # 4-1、iterable:可迭代对象,如列表、元组、集合、字典、字符串等
  9. # 4-2、key:命名参数,一个可选的函数,用来指定获取最大值的方法
  10. # 4-3、default:命名参数,用来指定最大值不存在时返回的默认值.如果未提供且iterable为空,则会引发ValueError
  11. # 4-4、arg:指定数值
  12. # 5.返回值:
  13. # 5-1、如果iterable非空,则返回iterable中的最大值
  14. # 5-2、如果iterable为空且提供了default参数,则返回default的值
  15. # 5-3、如果iterable为空且未提供default参数,则引发ValueError
  16. # 5-4、返回给定参数的最大值
  17. # 6.说明:使用max()函数
  18. # 6-1、如果是数值型参数,则取数值最大者
  19. # 6-2、如果是字符型参数,则取字母表排序靠后者
  20. # 6-3、当存在多个相同的最大值时,则返回得是最先出现的那个最大值
  21. # 6-4、当key=lambda时,不论匿名函数如何处理参数,返回的不是处理后的结果,而是结果对应的参数本身,即匿名函数lambda的处理结果,只能充当参数用
  22. # 7.示例:
  23. # 用dir()函数获取该函数内置的属性和方法
  24. print(dir(max))
  25. # ['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
  26. # '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__',
  27. # '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__',
  28. # '__str__', '__subclasshook__', '__text_signature__']
  29. # 用help()函数获取该函数的文档信息
  30. help(max)
  31. # 应用一:查找最大值
  32. # 示例1:查找列表中的最大值
  33. numbers = [3, 5, 10, 8, 6, 11, 24]
  34. max_number = max(numbers)
  35. print(max_number)
  36. # 24
  37. # 示例2:查找字符串中的最大字符(按ASCII值)
  38. characters = "myelsa"
  39. max_char = max(characters)
  40. print(max_char)
  41. # y
  42. # 示例3:使用key参数查找最大元素(根据自定义标准)
  43. students = [
  44. {'name': 'Myelsa', 'score': 98},
  45. {'name': 'Bruce', 'score': 92},
  46. {'name': 'Jimmy', 'score': 88}
  47. ]
  48. # 查找分数最高的学生
  49. highest_scoring_student = max(students, key=lambda student: student['score'])
  50. print(highest_scoring_student)
  51. # {'name': 'Myelsa', 'score': 98}
  52. # 示例4:处理空列表并返回默认值(使用try-except)
  53. numbers = []
  54. default_value = 0
  55. try:
  56. max_number = max(numbers)
  57. except ValueError:
  58. max_number = default_value
  59. print(max_number)
  60. # 0
  61. # 示例5:Python 3.8及以后版本使用default参数
  62. numbers = []
  63. max_number = max(numbers, default=0)
  64. print(max_number)
  65. # 0
  66. # 示例5:查找字符串中的最长字符
  67. words = ['apple', 'banana', 'cherry', 'date']
  68. max_length_word = max(words, key=len)
  69. print(max_length_word)
  70. # banana
  71. # 示例6:在多个值中查找最大值
  72. value1 = 10
  73. value2 = 20
  74. value3 = 30
  75. max_value = max(value1, value2, value3)
  76. print("这些值中的最大值是:", max_value)
  77. # 这些值中的最大值是: 30
  78. # 示例7:在嵌套列表中查找最大值
  79. nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, [9, 10, 11]]]
  80. max_value = max(max(sublist) for sublist in nested_list)
  81. print(max_value)
  82. # 11
  83. # 应用二:使用自定义函数
  84. # 示例1:找出列表中字典元素中某个键对应的最大值
  85. # 自定义函数,用于从字典中提取指定键的值
  86. def get_score(student):
  87. return student['score']
  88. # 学生列表,包含字典元素
  89. students = [
  90. {'name': 'Myelsa', 'score': 98},
  91. {'name': 'Bruce', 'score': 92},
  92. {'name': 'Jimmy', 'score': 96},
  93. ]
  94. # 使用max函数和自定义的get_score函数找出分数最高的学生
  95. max_score_student = max(students, key=get_score)
  96. print("分数最高的学生是:", max_score_student)
  97. # 分数最高的学生是: {'name': 'Myelsa', 'score': 98}
  98. # 示例2:找出字符串列表中长度最长的字符串
  99. # 自定义函数,用于获取字符串的长度
  100. def get_length(s):
  101. return len(s)
  102. # 字符串列表
  103. words = ['apple', 'banana', 'cherry', 'date']
  104. # 使用max函数和自定义的get_length函数找出最长的字符串
  105. longest_word = max(words, key=get_length)
  106. print("最长的单词是:", longest_word)
  107. # 最长的单词是: banana
  108. # 示例3:找出列表中自定义对象属性的最大值
  109. # 自定义一个类
  110. class Person:
  111. def __init__(self, name, age):
  112. self.name = name
  113. self.age = age
  114. # 自定义函数,用于从Person对象中提取年龄
  115. def get_age(person):
  116. return person.age
  117. # Person对象列表
  118. people = [
  119. Person('Myelsa', 18),
  120. Person('Bruce', 6),
  121. Person('Jimmy', 15),
  122. ]
  123. # 使用max函数和自定义的get_age函数找出年龄最大的人
  124. oldest_person = max(people, key=get_age)
  125. print("年龄最大的人是:", oldest_person.name)
  126. # 年龄最大的人是: Myelsa
  127. # 应用三:与生成器表达式结合使用
  128. # 示例1:找出列表中偶数的最大值
  129. numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  130. # 使用生成器表达式找出偶数,并用max()找出其中的最大值
  131. max_even_number = max(num for num in numbers if num % 2 == 0)
  132. print("列表中的最大偶数是:", max_even_number)
  133. # 列表中的最大偶数是: 10
  134. # 示例2:找出字典列表中某个键对应的最大值
  135. # 字典列表
  136. students = [
  137. {'name': 'Myelsa', 'score': 98},
  138. {'name': 'Bruce', 'score': 92},
  139. {'name': 'Jimmy', 'score': 96},
  140. ]
  141. # 使用生成器表达式和max()找出分数最高的学生
  142. max_score_student = max(
  143. student for student in students if student['score'] == max(student['score'] for student in students))
  144. print("分数最高的学生是:", max_score_student)
  145. # 分数最高的学生是: {'name': 'Myelsa', 'score': 98}
  146. # 示例3:找出字符串中每个单词长度的最大值
  147. sentence = "This is a sample sentence with different length words"
  148. # 使用生成器表达式和max()找出最长单词的长度
  149. max_word_length = max(len(word) for word in sentence.split())
  150. print("最长单词的长度是:", max_word_length)
  151. # 最长单词的长度是: 9
  152. # 示例4:找出嵌套列表中子列表的最大长度
  153. nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9], [10]]
  154. # 使用生成器表达式和max()找出嵌套列表中子列表的最大长度
  155. max_sublist_length = max(len(sublist) for sublist in nested_list)
  156. print("子列表的最大长度是:", max_sublist_length)
  157. # 子列表的最大长度是: 4
  158. # 应用四:数据分析和处理
  159. # 示例1:找出数值数组中的最大值
  160. import numpy as np
  161. # 创建一个NumPy数组
  162. data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 24])
  163. # 使用max()函数找出数组中的最大值
  164. max_value = np.max(data)
  165. print("数组中的最大值是:", max_value)
  166. # 数组中的最大值是: 24
  167. # 示例2:找出Pandas DataFrame中的最大值
  168. import pandas as pd
  169. # 创建一个Pandas DataFrame
  170. df = pd.DataFrame({
  171. 'A': [1, 2, 3, 4, 5],
  172. 'B': [5, 4, 3, 2, 1],
  173. 'C': [11, 8, 7, 6, 5]
  174. })
  175. # 找出每列的最大值
  176. max_values = df.max()
  177. print("每列的最大值:")
  178. print(max_values)
  179. # 找出整个DataFrame的最大值(不考虑列)
  180. max_overall = df.values.max()
  181. print("整个DataFrame的最大值:", max_overall)
  182. # A 5
  183. # B 5
  184. # C 11
  185. # dtype: int64
  186. # 整个DataFrame的最大值: 11
  187. # 示例3:找出字典中值最大的键
  188. # 创建一个字典
  189. data_dict = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
  190. # 使用max()和lambda表达式找出值最大的键
  191. max_key = max(data_dict, key=lambda k: data_dict[k])
  192. print("值最大的键是:", max_key)
  193. # 值最大的键是: d
  194. # 示例4:使用max()结合条件语句筛选数据
  195. # 假设我们有一个包含学生信息的列表,每个元素是一个字典
  196. students = [
  197. {'name': 'Myelsa', 'score': 98, 'grade': 'A'},
  198. {'name': 'Bruce', 'score': 88, 'grade': 'B'},
  199. {'name': 'Jimmy', 'score': 96, 'grade': 'A'},
  200. ]
  201. # 找出成绩最高且等级为'A'的学生
  202. max_score_a_grade_student = max(student for student in students if student['grade'] == 'A' and student['score'] == max( s['score'] for s in students if s['grade'] == 'A'))
  203. # 输出该学生的信息
  204. print("成绩最高且等级为'A'的学生是:", max_score_a_grade_student)
  205. # 成绩最高且等级为'A'的学生是: {'name': 'Myelsa', 'score': 98, 'grade': 'A'}
  206. # 应用五:算法与编程
  207. # 示例1:在数组中找到两个数的和等于给定目标值的最大数对
  208. def max_sum_of_two_numbers(nums, target):
  209. nums.sort() # 先对数组进行排序
  210. left, right = 0, len(nums) - 1
  211. max_sum = float('-inf') # 初始化最大和为负无穷大
  212. max_pair = None
  213. while left < right:
  214. current_sum = nums[left] + nums[right]
  215. if current_sum == target:
  216. max_sum = current_sum
  217. max_pair = (nums[left], nums[right])
  218. break # 找到后直接退出循环
  219. elif current_sum < target:
  220. left += 1 # 和太小,增加左边的数
  221. else:
  222. right -= 1 # 和太大,减少右边的数
  223. if max_pair is None:
  224. return None # 没有找到符合条件的数对
  225. else:
  226. return max_pair
  227. # 示例用法
  228. nums = [2, 7, 11, 15]
  229. target = 9
  230. result = max_sum_of_two_numbers(nums, target)
  231. print("找到的最大数对是:", result)
  232. # 找到的最大数对是: (2, 7)
  233. # 示例2:在二叉搜索树中找到最大的值
  234. class TreeNode:
  235. def __init__(self, val=0, left=None, right=None):
  236. self.val = val
  237. self.left = left
  238. self.right = right
  239. def find_max_in_bst(root):
  240. if root is None:
  241. return None
  242. current = root
  243. while current.right is not None:
  244. current = current.right # 沿着右子树向下遍历直到没有右子树
  245. return current.val # 返回最右边的节点的值,即最大值
  246. # 构建一个简单的二叉搜索树
  247. root = TreeNode(4)
  248. root.left = TreeNode(2)
  249. root.right = TreeNode(7)
  250. root.left.left = TreeNode(1)
  251. root.left.right = TreeNode(3)
  252. root.right.left = TreeNode(6)
  253. root.right.right = TreeNode(9)
  254. # 查找二叉搜索树中的最大值
  255. max_value = find_max_in_bst(root)
  256. print("二叉搜索树中的最大值是:", max_value)
  257. # 示例3:在数组中找到最长递增子序列的长度
  258. def length_of_lis(nums):
  259. if not nums:
  260. return 0
  261. lengths = [1] * len(nums) # 初始化每个元素的LIS长度为1
  262. max_length = 1 # 最长递增子序列的初始长度
  263. for i in range(1, len(nums)):
  264. for j in range(i):
  265. if nums[i] > nums[j]:
  266. lengths[i] = max(lengths[i], lengths[j] + 1) # 更新LIS长度
  267. max_length = max(max_length, lengths[i]) # 更新最大长度
  268. return max_length
  269. # 示例用法
  270. nums = [10, 24, 3, 5, 6, 8, 11, 7]
  271. lis_length = length_of_lis(nums)
  272. print("最长递增子序列的长度是:", lis_length)
  273. # 最长递增子序列的长度是: 5
1-2、VBA:
略,待后补。
2、推荐阅读:

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

Python算法之旅:Algorithm

Python函数之旅:Functions

个人主页:神奇夜光杯-CSDN博客 
文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览61139 人正在系统学习中
遨游码海,我心飞扬
微信名片
注:本文转载自blog.csdn.net的神奇夜光杯的文章"https://myelsa1024.blog.csdn.net/article/details/138265565"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

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

分类栏目

后端 (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