为什么我不能将 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.
假设:
- N 是 [1...1,000]
范围内的整数
- 数组
A
的每个元素都是 [-10,000..10,000] 范围内的整数。
- 数组
A
中至少有一个元素满足任务语句中的条件
我想出了以下我认为很优雅的解决方案,但我得到的分数只有 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
的生成器代替不必要的列表。它还会使用更具话题性的错误消息重新引发最常见的故障。此功能更易于维护和使用。
我最近参加了一个面试,被要求使用 Python 解决以下问题:
写一个函数:
def solution(A):
这样,给定一个由 N 个整数组成的数组 A
,它 return 是所有一位整数中的最大值。
例如给定数组A如下:
[-6, -91, 1011, -100, 84, -22, 0, 1, 473]
函数应该return 1.
假设:
- N 是 [1...1,000] 范围内的整数
- 数组
A
的每个元素都是 [-10,000..10,000] 范围内的整数。 - 数组
A
中至少有一个元素满足任务语句中的条件
我想出了以下我认为很优雅的解决方案,但我得到的分数只有 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
的生成器代替不必要的列表。它还会使用更具话题性的错误消息重新引发最常见的故障。此功能更易于维护和使用。