我的Python有点生疏,对于这个极其简单的算法我真的很困扰。
我正在尝试编写一个函数,该函数接受两个参数(目标值和数值列表),以查找数值列表中最靠近目标值的数字;如果存在并列,则选择更小的数字。
这是我的进展,但我仅选择了较低的数字,而没有实际比较列表中的值与目标的相对距离之间的差异。
因此,实际上,我的函数根本没有正确完成挑战,因为47实际上比31更接近46;但是,如果列表中包含的数字是45和47(假设),那么它们将与我的目标数字等距,因此应打印45而不是47。
我希望答案使用简单的for/if/while循环,以便我可以真正练习我的技能。
其他更高级的答案也欢迎详细解释。
编辑
你们的一些非常好的答案,非常感谢;我正在测试它们,并将选择最适合我的风格的答案,并将其余的用作参考,即使你有最好的一行答案。
target = 46
values = [1, 22, 31, 47, 87, 99]
def closest_to_target(target, values):
lower = []
for number in values:
if number < target:
lower.append(number)
if lower:
lowest = sorted(lower, reverse=True)[0]
return lowest
else:
return "Error handling array"
print closest_to_target(target, values)
47
),还是想要刚好小于目标数的数字(这里是31
)?此外,你是否喜欢使用循环?我认为列表推导式更适合这种情况。 - RishiG