Python-VBA函数之旅-max函数

目录

一、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.函数:max
# 2.功能:用于获取传入的多个参数的最大值,或者传入的可迭代对象(或之中的元素)的最大值
# 3.语法:
# 3-1、max(iterable, *, key=None)
# 3-2、max(iterable, *, default=None, key=None )
# 3-3、max(arg1, arg2, *args, key=None)
# 4.参数:
# 4-1、iterable:可迭代对象,如列表、元组、集合、字典、字符串等
# 4-2、key:命名参数,一个可选的函数,用来指定获取最大值的方法
# 4-3、default:命名参数,用来指定最大值不存在时返回的默认值.如果未提供且iterable为空,则会引发ValueError
# 4-4、arg:指定数值
# 5.返回值:
# 5-1、如果iterable非空,则返回iterable中的最大值
# 5-2、如果iterable为空且提供了default参数,则返回default的值
# 5-3、如果iterable为空且未提供default参数,则引发ValueError
# 5-4、返回给定参数的最大值
# 6.说明:使用max()函数
# 6-1、如果是数值型参数,则取数值最大者
# 6-2、如果是字符型参数,则取字母表排序靠后者
# 6-3、当存在多个相同的最大值时,则返回得是最先出现的那个最大值
# 6-4、当key=lambda时,不论匿名函数如何处理参数,返回的不是处理后的结果,而是结果对应的参数本身,即匿名函数lambda的处理结果,只能充当参数用
# 7.示例:
# 用dir()函数获取该函数内置的属性和方法
print(dir(max))
# ['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
# '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__',
# '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__',
# '__str__', '__subclasshook__', '__text_signature__']

# 用help()函数获取该函数的文档信息
help(max)

# 应用一:查找最大值
# 示例1:查找列表中的最大值
numbers = [3, 5, 10, 8, 6, 11, 24]
max_number = max(numbers)
print(max_number)
# 24

# 示例2:查找字符串中的最大字符(按ASCII值)
characters = "myelsa"
max_char = max(characters)
print(max_char)
# y

# 示例3:使用key参数查找最大元素(根据自定义标准)
students = [
    {'name': 'Myelsa', 'score': 98},
    {'name': 'Bruce', 'score': 92},
    {'name': 'Jimmy', 'score': 88}
]
# 查找分数最高的学生
highest_scoring_student = max(students, key=lambda student: student['score'])
print(highest_scoring_student)
# {'name': 'Myelsa', 'score': 98}

# 示例4:处理空列表并返回默认值(使用try-except)
numbers = []
default_value = 0
try:
    max_number = max(numbers)
except ValueError:
    max_number = default_value
print(max_number)
# 0

# 示例5:Python 3.8及以后版本使用default参数
numbers = []
max_number = max(numbers, default=0)
print(max_number)
# 0

# 示例5:查找字符串中的最长字符
words = ['apple', 'banana', 'cherry', 'date']
max_length_word = max(words, key=len)
print(max_length_word)
# banana

# 示例6:在多个值中查找最大值
value1 = 10
value2 = 20
value3 = 30
max_value = max(value1, value2, value3)
print("这些值中的最大值是:", max_value)
# 这些值中的最大值是: 30

# 示例7:在嵌套列表中查找最大值
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, [9, 10, 11]]]
max_value = max(max(sublist) for sublist in nested_list)
print(max_value)
# 11

# 应用二:使用自定义函数
# 示例1:找出列表中字典元素中某个键对应的最大值
# 自定义函数,用于从字典中提取指定键的值
def get_score(student):
    return student['score']
# 学生列表,包含字典元素
students = [
    {'name': 'Myelsa', 'score': 98},
    {'name': 'Bruce', 'score': 92},
    {'name': 'Jimmy', 'score': 96},
]
# 使用max函数和自定义的get_score函数找出分数最高的学生
max_score_student = max(students, key=get_score)
print("分数最高的学生是:", max_score_student)
# 分数最高的学生是: {'name': 'Myelsa', 'score': 98}

# 示例2:找出字符串列表中长度最长的字符串
# 自定义函数,用于获取字符串的长度
def get_length(s):
    return len(s)
# 字符串列表
words = ['apple', 'banana', 'cherry', 'date']
# 使用max函数和自定义的get_length函数找出最长的字符串
longest_word = max(words, key=get_length)
print("最长的单词是:", longest_word)
# 最长的单词是: banana

# 示例3:找出列表中自定义对象属性的最大值
# 自定义一个类
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
# 自定义函数,用于从Person对象中提取年龄
def get_age(person):
    return person.age
# Person对象列表
people = [
    Person('Myelsa', 18),
    Person('Bruce', 6),
    Person('Jimmy', 15),
]
# 使用max函数和自定义的get_age函数找出年龄最大的人
oldest_person = max(people, key=get_age)
print("年龄最大的人是:", oldest_person.name)
# 年龄最大的人是: Myelsa

# 应用三:与生成器表达式结合使用
# 示例1:找出列表中偶数的最大值
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 使用生成器表达式找出偶数,并用max()找出其中的最大值
max_even_number = max(num for num in numbers if num % 2 == 0)
print("列表中的最大偶数是:", max_even_number)
# 列表中的最大偶数是: 10

# 示例2:找出字典列表中某个键对应的最大值
# 字典列表
students = [
    {'name': 'Myelsa', 'score': 98},
    {'name': 'Bruce', 'score': 92},
    {'name': 'Jimmy', 'score': 96},
]
# 使用生成器表达式和max()找出分数最高的学生
max_score_student = max(
    student for student in students if student['score'] == max(student['score'] for student in students))
print("分数最高的学生是:", max_score_student)
# 分数最高的学生是: {'name': 'Myelsa', 'score': 98}

# 示例3:找出字符串中每个单词长度的最大值
sentence = "This is a sample sentence with different length words"
# 使用生成器表达式和max()找出最长单词的长度
max_word_length = max(len(word) for word in sentence.split())
print("最长单词的长度是:", max_word_length)
# 最长单词的长度是: 9

# 示例4:找出嵌套列表中子列表的最大长度
nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9], [10]]
# 使用生成器表达式和max()找出嵌套列表中子列表的最大长度
max_sublist_length = max(len(sublist) for sublist in nested_list)
print("子列表的最大长度是:", max_sublist_length)
# 子列表的最大长度是: 4

# 应用四:数据分析和处理
# 示例1:找出数值数组中的最大值
import numpy as np
# 创建一个NumPy数组
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 24])
# 使用max()函数找出数组中的最大值
max_value = np.max(data)
print("数组中的最大值是:", max_value)
# 数组中的最大值是: 24

# 示例2:找出Pandas DataFrame中的最大值
import pandas as pd
# 创建一个Pandas DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [5, 4, 3, 2, 1],
    'C': [11, 8, 7, 6, 5]
})
# 找出每列的最大值
max_values = df.max()
print("每列的最大值:")
print(max_values)
# 找出整个DataFrame的最大值(不考虑列)
max_overall = df.values.max()
print("整个DataFrame的最大值:", max_overall)
# A     5
# B     5
# C    11
# dtype: int64
# 整个DataFrame的最大值: 11

# 示例3:找出字典中值最大的键
# 创建一个字典
data_dict = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
# 使用max()和lambda表达式找出值最大的键
max_key = max(data_dict, key=lambda k: data_dict[k])
print("值最大的键是:", max_key)
# 值最大的键是: d

# 示例4:使用max()结合条件语句筛选数据
# 假设我们有一个包含学生信息的列表,每个元素是一个字典
students = [
    {'name': 'Myelsa', 'score': 98, 'grade': 'A'},
    {'name': 'Bruce', 'score': 88, 'grade': 'B'},
    {'name': 'Jimmy', 'score': 96, 'grade': 'A'},
]
# 找出成绩最高且等级为'A'的学生
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'))
# 输出该学生的信息
print("成绩最高且等级为'A'的学生是:", max_score_a_grade_student)
# 成绩最高且等级为'A'的学生是: {'name': 'Myelsa', 'score': 98, 'grade': 'A'}

# 应用五:算法与编程
# 示例1:在数组中找到两个数的和等于给定目标值的最大数对
def max_sum_of_two_numbers(nums, target):
    nums.sort()  # 先对数组进行排序
    left, right = 0, len(nums) - 1
    max_sum = float('-inf')  # 初始化最大和为负无穷大
    max_pair = None
    while left < right:
        current_sum = nums[left] + nums[right]
        if current_sum == target:
            max_sum = current_sum
            max_pair = (nums[left], nums[right])
            break  # 找到后直接退出循环
        elif current_sum < target:
            left += 1  # 和太小,增加左边的数
        else:
            right -= 1  # 和太大,减少右边的数

    if max_pair is None:
        return None  # 没有找到符合条件的数对
    else:
        return max_pair
# 示例用法
nums = [2, 7, 11, 15]
target = 9
result = max_sum_of_two_numbers(nums, target)
print("找到的最大数对是:", result)
# 找到的最大数对是: (2, 7)

# 示例2:在二叉搜索树中找到最大的值
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
def find_max_in_bst(root):
    if root is None:
        return None
    current = root
    while current.right is not None:
        current = current.right  # 沿着右子树向下遍历直到没有右子树
    return current.val  # 返回最右边的节点的值,即最大值
# 构建一个简单的二叉搜索树
root = TreeNode(4)
root.left = TreeNode(2)
root.right = TreeNode(7)
root.left.left = TreeNode(1)
root.left.right = TreeNode(3)
root.right.left = TreeNode(6)
root.right.right = TreeNode(9)
# 查找二叉搜索树中的最大值
max_value = find_max_in_bst(root)
print("二叉搜索树中的最大值是:", max_value)

# 示例3:在数组中找到最长递增子序列的长度
def length_of_lis(nums):
    if not nums:
        return 0
    lengths = [1] * len(nums)  # 初始化每个元素的LIS长度为1
    max_length = 1  # 最长递增子序列的初始长度
    for i in range(1, len(nums)):
        for j in range(i):
            if nums[i] > nums[j]:
                lengths[i] = max(lengths[i], lengths[j] + 1)  # 更新LIS长度
        max_length = max(max_length, lengths[i])  # 更新最大长度
    return max_length
# 示例用法
nums = [10, 24, 3, 5, 6, 8, 11, 7]
lis_length = length_of_lis(nums)
print("最长递增子序列的长度是:", lis_length)
# 最长递增子序列的长度是: 5
1-2、VBA:
略,待后补。
2、推荐阅读:

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

Python算法之旅:Algorithm

Python函数之旅:Functions

个人主页:神奇夜光杯-CSDN博客 
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神奇夜光杯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值