为什么我不能将 max 与 Python 结合使用来查找数组中的最大一位整数?

Why can't I use max with Python to find maximum one-digit integer in array?

我最近参加了一个面试,被要求使用 Python 解决以下问题:

写一个函数:

def solution(A):

这样,给定一个由 N 个整数组成的数组 A,它 return 是所有一位整数中的最大值。

例如给定数组A如下:

[-6, -91, 1011, -100, 84, -22, 0, 1, 473]

函数应该return 1.

假设:

我想出了以下我认为很优雅的解决方案,但我得到的分数只有 55%:

def solution(A):
    return max([i for i in A if len(str(i))==1])

为什么这个解决方案不正确?

不是最优雅的。这假设例如-3 是个位数。

该算法将按照规则集进行游戏。考虑约束:

  • 人数是-10000到10000
  • 至少一个元素满足条件

那我们就可以把9以外的所有数都守成最小的-10001,这样就不认为是max了。我们不需要关心小于 -9 的数字,因为我们确信至少有 1 个元素(无论是正数还是负数,无论哪种方式都大于那些小于 -9 的数字)将满足条件.

print(
    max(
        [-6, -91, 1011, -100, 84, -22, 0, 1, 473, 5, 4, 67, 7, 3, 56],
        key=lambda num: -10001 if num > 9 else num
    )
)
print(
    max(
        [-6, -91, 1011, -100, 84, -22, 10, -5, -8, 67],
        key=lambda num: -10001 if num > 9 else num
    )
)

输出:

7
-5

这是一个解决方案,在我的书中打勾。

def solution(integers):
    """Return max single digit integer in sequence `integers`"""
    try:
        return max(i for i in integers if -9 <= i <= 9)
    except ValueError:
        return ValueError("Could not find single digit integer in list")

print(solution([-6, -91, 1011, -100, 84, -22, 0, 1, 473]))

它使用描述性参数名称,有注释,对数字大小进行简单比较,并使用带有内置函数 max 的生成器代替不必要的列表。它还会使用更具话题性的错误消息重新引发最常见的故障。此功能更易于维护和使用。