在数字列表中查找最接近的记录速度[python]



我需要知道如何循环浏览列表并找到最接近限速的速度。所以每次都会在速度列表中反复查看差异。

到目前为止我所拥有的:

def find_nearest_speed(recorded_speeds, speed_limit):
"""Finds the closest recorded speed when compared to the speed limit."""
closest = abs(speed_data[0] - speed_limit)
for current_element in speed_data:
speed_difference = abs(current_element - speed_limit)
if speed_difference < abs(closest - speed_limit):
closest = current_element
return closest
max_speed = 30 
speed_data = [24, 25, 27, 28, 31, 35]           
closest_speed = (find_nearest_speed(speed_data, max_speed))
print("The closest recorded speed was {} Km/h.".format(closest_speed))

我得到的:

The closest recorded speed was 24 Km/h.

我应该得到什么:

The closest recorded speed was 31 Km/h.

您可以使用min:

max_speed = 30
speed_data = [24, 25, 27, 28, 31, 35]
closest_speed = min(speed_data, key=lambda x: abs(x - max_speed))
print("The closest recorded speed was {} Km/h.".format(closest_speed))

输出

The closest recorded speed was 31 Km/h.

这就是您应该拥有的:

def find_nearest_speed(recorded_speeds, speed_limit):
"""Finds the closest recorded speed when compared to the speed limit."""
closest = float('inf')
for current_element in speed_data:
speed_difference = abs(current_element - speed_limit)
if speed_difference < abs(closest - speed_limit):
closest = current_element
return closest if len(recorded_speeds) > 0 else None

唯一的变化是最初的closest = float('inf')

如果在if语句的"内部"使用return语句,则只要条件speed_difference < abs(closest - speed_limit)true,它就会返回,这将始终满足列表第一元素的代码。

因此,您需要删除return语句之前的缩进,以便它在返回结果之前等待循环结束。

另一个注意事项是,语句closest = abs(speed_data[0] - speed_limit)是错误的,因为您为closest变量分配的是list元素和speed_limit之间的差,但通过查看函数代码,您应该为其分配list元素:closest = speed_data[0]

def find_nearest_speed(recorded_speeds, speed_limit):
"""Finds the closest recorded speed when compared to the speed limit."""
closest = speed_data[0] # Sets the closest as the list's first element
for current_element in speed_data:
speed_difference = abs(current_element - speed_limit)
if speed_difference < abs(closest - speed_limit):
closest = current_element
return closest
max_speed = 30 
speed_data = [24, 25, 27, 28, 31, 35]           
closest_speed = (find_nearest_speed(speed_data, max_speed))
print("The closest recorded speed was {} Km/h.".format(closest_speed))

最新更新