Python自定义pair类获取数组最值返回None,遇AttributeError求助
问题分析与解决
你的代码问题根本不是pair类的问题,而是自定义函数getminmax没有返回创建好的minmax对象,导致调用后得到的是None,这才触发了AttributeError。
错误根源
Python中,函数如果没有显式写return语句,默认会返回None。你在getminmax里创建了minmax实例并修改了它的min和max属性,但最后没有把这个实例返回出去,所以执行minmax = getminmax(arr, arr_size)后,minmax是None,自然访问不了.min属性。
修复步骤
- 在
getminmax函数的最后添加return minmax语句。 - 额外修复一个潜在bug:当数组长度
n=1时,第一个if执行后,后面的if arr[0] > arr[1]会去访问arr[1],导致索引越界错误,需要把第二个if改成elif n > 1。
修复后的完整代码
class pair: def __init__(self): self.min = 0 self.max = 0 def getminmax(arr: list, n: int) -> pair: minmax = pair() # 处理空数组的情况(可选,避免后续报错) if n == 0: return minmax # 如果只有一个元素,直接赋值 if n == 1: minmax.min = arr[0] minmax.max = arr[0] return minmax # 提前返回,避免执行后面的逻辑 # 如果元素数量大于1,初始化minmax elif n > 1: if arr[0] > arr[1]: minmax.min = arr[1] minmax.max = arr[0] else: minmax.min = arr[0] minmax.max = arr[1] # 遍历剩余元素更新最值 for i in range(2, n): if arr[i] > minmax.max: minmax.max = arr[i] elif arr[i] < minmax.min: minmax.min = arr[i] # 必须返回创建好的minmax对象 return minmax # 测试代码 arr = [1000, 11, 445, 1, 330, 3000] arr_size = 6 minmax = getminmax(arr, arr_size) print('Minimum', minmax.min) print('Maximum', minmax.max)
运行结果
Minimum 1 Maximum 3000
内容的提问来源于stack exchange,提问作者Data Stoner
相关产品推荐
相关产品推荐

