поиск ближайшей скорости записи в списке чисел [python] - PullRequest
0 голосов
/ 19 ноября 2018

Мне нужно знать, как пройтись по списку и найти скорость, ближайшую к пределу скорости.так много итеративно просматривайте список скоростей, каждый раз просматривая разницу.

Что у меня есть:

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.

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Вот что у вас должно быть:

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') изначально

0 голосов
/ 19 ноября 2018

Если вы используете оператор return "внутри" оператора if, он вернется, как только условие speed_difference < abs(closest - speed_limit) будет true, которое всегда будет удовлетворяться вашим кодом для первого элемента списка.

Поэтому необходимо удалить отступы перед оператором return, чтобы он ожидал окончания цикла, прежде чем вернуть результат.

Еще одно замечание: оператор closest = abs(speed_data[0] - speed_limit) неверен, посколькуВы присваиваете переменную closest с разницей между элементом списка и speed_limit, но, увидев свой код функции, вам лучше назначить ее с элементом списка: 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))
0 голосов
/ 19 ноября 2018

Вы можете использовать мин :

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...