Получение MemoryError при добавлении в список с помощью цикла for - PullRequest
1 голос
/ 06 ноября 2019
def show_magicians(magicians_list):
    """Print the name of each magician in a list."""
    for magician in magicians_list:
        print(magician.title())

def make_great(magicians_list):
    """Make each magician great again."""
    for magician in magicians_list:
        magician = magician + " " + "the Great"
        magicians_list.append(magician)

list_of_dudes = ['houdini','david blaine','jebus']

make_great(list_of_dudes)

show_magicians(list_of_dudes)

print(list_of_dudes)

Почему вторая функция не работает? Я пытаюсь изменить каждого мага в списке парней на «[Волшебник] Великий», но у меня постоянно возникает ошибка памяти. Любой совет?

Спасибо, -конфузированный n00b

1 Ответ

2 голосов
/ 06 ноября 2019

Вы не должны добавлять в список, вы должны заменить каждый элемент его "отличной" версией.

def make_great(magicians_list):
    """Make each magician great again."""
    for i, magician in enumerate(magicians_list):
        magician = magician + " " + "the Great"
        magicians_list[i] = magician

Ваша версия добавляется в список, по которому она повторяется. В результате он никогда не заканчивается, потому что он продолжает перебирать новые элементы и делает их еще больше (houdini the Great the Great), а затем перебирает эти элементы (houdini the Great the Great the Great) и т. Д., Пока не закончится память.

...