从包含inf的混合列表中提取最大、最小浮点数值
从含inf的列表中提取最大/最小浮点数的代码优化
原代码存在的问题
- 初始值设置不合理:
lowest和highest初始化为0,若列表中有效数值均大于0,lowest会错误保留0;若存在负数,highest的初始值也会导致结果错误。 - 多余的非负限制:
i >=0会过滤掉负数有效数值,不符合题目仅排除inf的要求。 - 变量名冲突:使用
list作为变量名覆盖了Python内置类型,属于不规范写法。 - 未处理边界情况:若列表全为inf,当前代码会返回无意义的
[0,0],缺乏异常处理。
优化后的代码(简洁高效版)
利用Python内置函数直接处理,逻辑清晰且不易出错:
# 避免使用内置类型名list,改用nums作为变量名 nums = (float('inf'), float('inf'), float('inf'), 0.9, 0.5, 2.5, 3.5, 4.9, 9.9, 0.2) def get_highest_lowest(): # 过滤掉所有inf,得到有效浮点数值列表 valid_nums = [num for num in nums if num != float('inf')] # 处理全是inf的边界情况 if not valid_nums: raise ValueError("列表中没有有效的浮点数值") # 用内置max、min函数直接获取结果 highest = max(valid_nums) lowest = min(valid_nums) return [highest, lowest] # 测试调用 print(get_highest_lowest()) # 输出: [9.9, 0.2]
手动循环实现版(适合学习理解)
如果需要手动遍历实现,可参考以下代码:
nums = (float('inf'), float('inf'), float('inf'), 0.9, 0.5, 2.5, 3.5, 4.9, 9.9, 0.2) def get_highest_lowest(): valid_nums = [] # 先筛选出非inf的数值 for num in nums: if num != float('inf'): valid_nums.append(num) if not valid_nums: raise ValueError("列表中没有有效的浮点数值") # 以第一个有效数值为初始值 lowest = valid_nums[0] highest = valid_nums[0] # 遍历有效数值更新最大、最小值 for num in valid_nums: if num < lowest: lowest = num if num > highest: highest = num return [highest, lowest]
内容的提问来源于stack exchange,提问作者NasserCzar
相关产品推荐
相关产品推荐

