Ближайший ноль. Проблемы с выносом констант

Рейтинг: -1Ответов: 1Опубликовано: 07.08.2023

Помогите исправить замечания по коду. Нужно вынести константу как ключевой аргумент интерфейса функции и объявить список с индексами нулей в начале алгоритма.

    def nearest_zero (n, street) -> str:
    neighbours = [0]*n
    if street[0] != 0:#Задать константу как ключевой аргумент интерфейса функции
        neighbours[0] = n
    for i in range(1, n):
        if street[i] == 0:
            neighbours[i] = 0#Стоит объявить список с индексами нулей в начале алгоритма.
        else:
            neighbours[i] = neighbours[i - 1] + 1
    for i in range(n-2, -1, -1):
        if street[i] == 0:
            neighbours[i] = 0#Стоит объявить список с индексами нулей в начале алгоритма.
        else:
            neighbours[i] = min(neighbours[i], neighbours[i + 1] + 1)
    answer = " ".join(map(str, neighbours))
    return answer

if __name__ == "__main__":
    n = int(input())
    street = [int(i) for i in input().split()]
    print(nearest_zero(n, street))

Ответы

▲ 1

Я так понимаю, Ваш проверяющий хотел, чтобы вы отдельно объявили список с индексами нулевых элементов. Сразу скажу, что на мой взгляд такое решение некорректное ни с точки зрения скорости, ни с точки зрения памяти. Получить его можно такой конструкцией:

zero_index_list = [i for i, v in enumerate(street) if v == 0]

Далее мы проверяем, только те элементы, номера которых не находятся в этом списке. Вот код всей программы:

def nearest_zero (n, street) -> str:
    zero_index_list = [i for i, v in enumerate(street) if v == 0] # Создаем список из индексов нулевых элементов
    neighbours = [0]*n
    for i in range(0, n):
        if i in zero_index_list:
            neighbours[i] = 0
        else:
            neighbours[i] = neighbours[i - 1] + 1
    for i in range(n-2, -1, -1):
        if i not in zero_index_list:
            neighbours[i] = min(neighbours[i], neighbours[i + 1] + 1)
    answer = " ".join(map(str, neighbours))
    return answer

if __name__ == "__main__":
    n = int(input())
    street = [int(i) for i in input().split()]
    print(nearest_zero(n, street))

Тесты:

6
1 0 2 3 4 5
1 0 1 2 3 4

5
0 1 1 1 0
0 1 2 1 0