为什么我用Python的max函数获取数组最大一位数的方案不正确?
问题描述
给定由N个整数组成的数组A,返回所有一位整数中的最大值。
需编写函数:
def solution(A):
示例
输入数组:[-6, -91, 1011, -100, 84, -22, 0, 1, 473]
正确输出:1
约束条件
- N是取值范围在[1, 1000]内的整数
- 数组A的每个元素都是取值范围在[-10000, 10000]内的整数
- 数组A中至少存在一个符合任务要求的元素
代码错误原因分析
你提交的代码如下:
def solution(A): return max([i for i in A if len(str(i))==1])
这段代码的核心错误出在一位整数的判断逻辑:
你通过len(str(i)) == 1判断数值是否为一位数,但负的一位数转为字符串后会包含负号,比如-6转为字符串是"-6",长度为2,会被你的筛选条件直接排除。
这种逻辑会触发两类问题:
- 如果数组中符合要求的一位数全是负数,你的筛选结果会是空列表,调用
max()时会直接抛出ValueError,完全无法返回结果 - 如果数组同时存在正的一位数和负的一位数,虽然不会报错,但你漏判了负的一位数的场景,遇到特殊测试用例时返回结果不符合要求
修复方案
正确的一位整数判断逻辑应该是数值的绝对值小于10,即abs(i) < 10,不需要转字符串处理,性能也更高。
修复后的代码如下:
def solution(A): return max(i for i in A if abs(i) < 10)
内容的提问来源于stack exchange,提问作者sprogissd
相关产品推荐
相关产品推荐

