Как записать часть кода, используя функцию enumerate?

def distance(num, blueprint):
step = None

for i in range(num):
    if blueprint[i] == 0:
        step = 0
    elif step is not None:
        step +=1
        blueprint[i] = step
    else:
        blueprint[i] = float('inf')

for i in range(num)[::-1]:
    if blueprint[i] == 0:
        step = 0
    else:
        step +=1
        blueprint[i] = min(blueprint[i], step)

return blueprint

if __name__ == '__main__':
    num = int(input())
    blueprint= list(map(int, input().split()))
    print(*distance(num, blueprint))

нужно записать часть кода, используя функцию enumerate

for i in range(num):
    if blueprint[i] == 0:
        step = 0
    elif step is not None:
        step +=1
        blueprint[i] = step
    else:
        blueprint[i] = float('inf')

Ответы (1 шт):

Автор решения: MarianD

Предпологая, что num == len(blueprint), вместо

for i in range(num):
    if blueprint[i] == 0:
        step = 0

примените

for i, bl in enumerate(blueprint):
    if bl == 0:
        step = 0

Но в вашем частном случае никакого преимущества в применении функции enumerate() я не вижу, т.к в этом цикле вы всё равно вынужден обращаетесь прямо к элементам списка blueprint, чтобы изменить их значение.

→ Ссылка