Почему изменение длины списка зависит от его исходной длины?

Вот функция из кода:

def mutate():
    global rats
    n = 0
    for i in range(len(rats)):
        r = rats[i-n]
        if r > max(rats)//4:
            rats[i-n] += random.triangular(r-(max(rats) // 4),-(max(rats) // 4),5-max(rats))
        else:
            del rats[i-n]
            n+= 1
    clear()

А вот код:

import random

rats = []
WIN = 800

def start_game():
    global rats
    for i in range(10):
        rats.append(random.triangular(0.0,5.0,0.4))
def clear():
    global rats
    n = 0
    for i in range(len(rats)):
        r = rats[i-n]
        if r < 0:
            del rats[i-n]
            n+= 1   
def more_rats():
    global rats
    for i in range(len(rats)//2):
        rats.append(random.triangular(max(rats)+0.5,min(rats),5-sum(rats)))
    clear()
def mutate():
    global rats
    n = 0
    for i in range(len(rats)):
        r = rats[i-n]
        if r > max(rats)//4:
            rats[i-n] += random.triangular(r-(max(rats) // 4),-(max(rats) // 4),5-max(rats))
        else:
            del rats[i-n]
            n+= 1

Почему изменение длины списка rats зависит от его исходной длины?


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

Автор решения: Сергей

Мало данных в вопросе, но предположу: Судя по названию функции,тут моделируется мутация (крыс), в списке rats - важный показатель(размер крысы). Вероятно, идут по всей популяции (по списку), и если особь имеет показатель, больший, чем макс показатель популяции, деленный на 4 (т.е. особь в числе 75% лучших), то она мутирует (rats[i-n] изменяется). Если же меньше, то просто вымирает (del rats[i-n]).

→ Ссылка