首页 最新 热门 推荐

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

Python-VBA函数之旅-min函数

  • 25-03-03 04:24
  • 2197
  • 9532
blog.csdn.net

目录

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

二、min函数使用注意事项

三、如何用好min函数?

1、min函数:

1-1、Python:

1-2、VBA:

2、推荐阅读:

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

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

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

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

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

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

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

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

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

二、min函数使用注意事项

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

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

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

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

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

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

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

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

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

三、如何用好min函数?

        要用好Python中的min()函数,你需要理解其工作原理和参数,并知道如何在不同的情况下有效地使用它。以下是一些建议,帮助你更好地利用min()函数:

1、理解基本用法:min()函数的基本用法是传入一个或多个参数,返回其中的最小值,如果传入的是序列(如列表、元组等),则返回序列中的最小值。

2、利用key参数:当你需要基于对象的某个属性或计算结果来比较对象时,可以利用key参数,例如,在字典列表中找出具有最小值的项。

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

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

5、理解返回类型:min()函数返回的是序列中的最小值,其类型与序列中的元素类型相同,如果传入多个不同类型的参数,Python会尝试进行类型转换以便比较,这可能会导致意外的结果,确保传入的参数类型是可以直接比较的。

6、避免不必要的调用:如果你知道序列已经排序,或者你知道最小值的位置(例如,在已知的数据结构中),那么直接访问该值可能比使用min()函数更高效。

7、检查输入有效性:在使用min()函数之前,确保你的输入是有效的,例如,如果你期望一个数字列表,但得到了一个包含非数字元素的列表,那么min()函数将抛出异常,你可以使用类型检查或异常处理来确保输入的有效性。

8、阅读文档和示例:Python的官方文档通常包含关于函数的详细信息和示例,阅读min()函数的文档可以帮助你更好地理解其工作原理和最佳实践。

        总之,只有通过遵循这些建议,你才能更加有效地使用Python中的min()函数,并避免常见的错误和问题。

1、min函数:
1-1、Python:
  1. # 1.函数:min
  2. # 2.功能:用于获取传入的多个参数的最小值,或者传入的可迭代对象(或之中的元素)的最小值
  3. # 3.语法:
  4. # 3-1、min(iterable, *, key=None)
  5. # 3-2、min(iterable, *, default=None, key=None )
  6. # 3-3、min(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.说明:使用min()函数
  18. # 6-1、如果是数值型参数,则取数值最小者
  19. # 6-2、如果是字符型参数,则取字母表排序靠前者
  20. # 6-3、当存在多个相同的最小值时,则返回得是最先出现的那个最小值
  21. # 6-4、当key=lambda时,不论匿名函数如何处理参数,返回的不是处理后的结果,而是结果对应的参数本身,即匿名函数lambda的处理结果,只能充当参数用
  22. # 7.示例:
  23. # 用dir()函数获取该函数内置的属性和方法
  24. print(dir(min))
  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(min)
  31. # 应用一:查找最小值
  32. # 示例1:查找列表中的最小值
  33. numbers = [3, 5, 10, 8, 6, 11, 24]
  34. min_number = min(numbers)
  35. print(min_number)
  36. # 3
  37. # 示例2:查找字符串中的最小字符(按ASCII值)
  38. characters = "myelsa"
  39. min_char = min(characters)
  40. print(min_char)
  41. # a
  42. # 示例3:使用key参数查找最小元素(根据自定义标准)
  43. students = [
  44. {'name': 'Myelsa', 'score': 98},
  45. {'name': 'Bruce', 'score': 92},
  46. {'name': 'Jimmy', 'score': 88}
  47. ]
  48. # 查找分数最低的学生
  49. lowest_scoring_student = min(students, key=lambda student: student['score'])
  50. print(lowest_scoring_student)
  51. # {'name': 'Jimmy', 'score': 88}
  52. # 示例4:处理空列表并返回默认值(使用try-except)
  53. numbers = []
  54. default_value = 0
  55. try:
  56. min_number = min(numbers)
  57. except ValueError:
  58. min_number = default_value
  59. print(min_number)
  60. # 0
  61. # 示例5:Python 3.8及以后版本使用default参数
  62. numbers = []
  63. min_number = min(numbers, default=0)
  64. print(min_number)
  65. # 0
  66. # 示例5:查找字符串中的最短字符
  67. words = ['apple', 'banana', 'cherry', 'date']
  68. min_shortest_word = min(words, key=len)
  69. print(min_shortest_word)
  70. # date
  71. # 示例6:在多个值中查找最小值
  72. value1 = 10
  73. value2 = 20
  74. value3 = 30
  75. min_value = min(value1, value2, value3)
  76. print("这些值中的最小值是:", min_value)
  77. # 这些值中的最小值是: 10
  78. # 示例7:在嵌套列表中查找最小值
  79. nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, [9, 10, 11]]]
  80. min_value = min(min(sublist) for sublist in nested_list)
  81. print(min_value)
  82. # 1
  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. # 使用min函数和自定义的get_score函数找出分数最低的学生
  95. min_score_student = min(students, key=get_score)
  96. print("分数最低的学生是:", min_score_student)
  97. # 分数最低的学生是: {'name': 'Bruce', 'score': 92}
  98. # 示例2:找出字符串列表中长度最短的字符串
  99. # 自定义函数,用于获取字符串的长度
  100. def get_length(s):
  101. return len(s)
  102. # 字符串列表
  103. words = ['apple', 'banana', 'cherry', 'date']
  104. # 使用min函数和自定义的get_length函数找出最短的字符串
  105. shortest_word = min(words, key=get_length)
  106. print("最短的单词是:", shortest_word)
  107. # 最短的单词是: date
  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. # 使用min函数和自定义的get_age函数找出年龄最小的人
  124. youngest_person = min(people, key=get_age)
  125. print("年龄最小的人是:", youngest_person.name)
  126. # 年龄最小的人是: Bruce
  127. # 应用三:与生成器表达式结合使用
  128. # 示例1:找出列表中偶数的最小值
  129. numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  130. # 使用生成器表达式找出偶数,并用min()找出其中的最小值
  131. min_even_number = min(num for num in numbers if num % 2 == 0)
  132. print("列表中的最小偶数是:", min_even_number)
  133. # 列表中的最小偶数是: 2
  134. # 示例2:找出字典列表中某个键对应的最小值
  135. # 字典列表
  136. students = [
  137. {'name': 'Myelsa', 'score': 98},
  138. {'name': 'Bruce', 'score': 92},
  139. {'name': 'Jimmy', 'score': 96},
  140. ]
  141. # 使用生成器表达式和min()找出分数最低的学生
  142. min_score_student = min(
  143. student for student in students if student['score'] == min(student['score'] for student in students))
  144. print("分数最低的学生是:", min_score_student)
  145. # 分数最低的学生是: {'name': 'Bruce', 'score': 92}
  146. # 示例3:找出字符串中每个单词长度的最小值
  147. sentence = "This is a sample sentence with different length words"
  148. # 使用生成器表达式和min()找出最短单词的长度
  149. min_word_length = min(len(word) for word in sentence.split())
  150. print("最短单词的长度是:", min_word_length)
  151. # 最短单词的长度是: 1
  152. # 示例4:找出嵌套列表中子列表的最小长度
  153. nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9], [10]]
  154. # 使用生成器表达式和min()找出嵌套列表中子列表的最小长度
  155. min_sublist_length = min(len(sublist) for sublist in nested_list)
  156. print("子列表的最小长度是:", min_sublist_length)
  157. # 子列表的最小长度是: 1
  158. # 应用四:数据分析和处理
  159. # 示例1:找出数值数组中的最小值
  160. import numpy as np
  161. # 创建一个NumPy数组
  162. data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 24])
  163. # 使用min()函数找出数组中的最小值
  164. min_value = np.min(data)
  165. print("数组中的最小值是:", min_value)
  166. # 数组中的最小值是: 1
  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. min_values = df.min()
  177. print("每列的最小值:")
  178. print(min_values)
  179. # 找出整个DataFrame的最小值(不考虑列)
  180. min_overall = df.values.min()
  181. print("整个DataFrame的最小值:", min_overall)
  182. # 每列的最小值:
  183. # A 1
  184. # B 1
  185. # C 5
  186. # dtype: int64
  187. # 整个DataFrame的最小值: 1
  188. # 示例3:找出字典中值最小的键
  189. # 创建一个字典
  190. data_dict = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
  191. # 使用min()和lambda表达式找出值最小的键
  192. min_key = min(data_dict, key=lambda k: data_dict[k])
  193. print("值最小的键是:", min_key)
  194. # 值最小的键是: a
  195. # 示例4:使用min()结合条件语句筛选数据
  196. # 假设我们有一个包含学生信息的列表,每个元素是一个字典
  197. students = [
  198. {'name': 'Myelsa', 'score': 98, 'grade': 'A'},
  199. {'name': 'Bruce', 'score': 88, 'grade': 'B'},
  200. {'name': 'Jimmy', 'score': 96, 'grade': 'A'},
  201. ]
  202. # 找出成绩最低且等级为'B'的学生
  203. min_score_b_grade_student = min(student for student in students if student['grade'] == 'B' and student['score'] == max( s['score'] for s in students if s['grade'] == 'B'))
  204. # 输出该学生的信息
  205. print("成绩最低且等级为'B'的学生是:", min_score_b_grade_student)
  206. # 成绩最低且等级为'B'的学生是: {'name': 'Bruce', 'score': 88, 'grade': 'B'}
  207. # 应用五:算法与编程
  208. # 示例1:使用min()实现二分查找算法
  209. def binary_search(arr, target):
  210. low = 0
  211. high = len(arr) - 1
  212. while low <= high:
  213. mid = (low + high) // 2
  214. if arr[mid] == target:
  215. return mid
  216. elif arr[mid] < target:
  217. low = mid + 1
  218. else:
  219. high = mid - 1
  220. return -1 # 如果找不到目标值,则返回 -1
  221. # 示例数组,必须是排序好的
  222. sorted_arr = [1, 3, 5, 7, 9]
  223. target_value = 5
  224. # 使用二分查找算法查找目标值
  225. index = binary_search(sorted_arr, target_value)
  226. if index != -1:
  227. print(f"Found {target_value} at index {index}")
  228. else:
  229. print(f"{target_value} not found in the array")
  230. # Found 5 at index 2
  231. # 示例2:使用min()找出数组中的最小值和其索引
  232. def find_min_and_index(arr):
  233. if not arr:
  234. return None, None
  235. min_value = min(arr)
  236. min_index = arr.index(min_value)
  237. return min_value, min_index
  238. # 示例数组
  239. arr = [4, 2, 9, 7, 5, 1]
  240. # 找出最小值和其索引
  241. min_value, min_index = find_min_and_index(arr)
  242. print(f"The minimum value is {min_value} at index {min_index}")
  243. # The minimum value is 1 at index 5
  244. # 示例3:使用min()实现K-最近邻算法中的距离计算
  245. import math
  246. def euclidean_distance(point1, point2):
  247. return math.sqrt(sum((a - b) ** 2 for a, b in zip(point1, point2)))
  248. def find_k_nearest_neighbors(dataset, query_point, k):
  249. distances = [(euclidean_distance(query_point, data_point), index) for index, data_point in enumerate(dataset)]
  250. distances.sort() # 按距离排序
  251. k_nearest = distances[:k] # 取前k个最近的点
  252. return k_nearest
  253. # 示例数据集
  254. dataset = [(1, 2), (5, 4), (9, 6), (4, 7), (8, 1), (7, 3)]
  255. query_point = (3, 1)
  256. k = 3
  257. # 找出最近的k个点
  258. k_nearest = find_k_nearest_neighbors(dataset, query_point, k)
  259. print(f"The {k} nearest neighbors are:")
  260. for distance, index in k_nearest:
  261. print(f"Point at index {index} with distance {distance}")
  262. # The 3 nearest neighbors are:
  263. # Point at index 0 with distance 2.23606797749979
  264. # Point at index 1 with distance 3.605551275463989
  265. # Point at index 5 with distance 4.47213595499958
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/138301544"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

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

分类栏目

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