Возможно ли с помощью функции содержащей цикл изменить содержимое списка? (Python 3.8)

Упражнение Напишите функцию make_great(), которая изменяет список фокусников, добавляя к имени каждого фокусника приставку «Great» . Убедитесь в том, что список был успешно изменен.

Код

name_magicians = ['Harry Houdini', 'David Copperfield', 'Apollo Robbins', 'David Devant', 'Shin Lim', 'David Blaine']
def make_great(names):
    for i in names:
        i = "Great " + i
make_great(name_magicians)
print(name_magicians)

Ожидаемый результат: ['Great Harry Houdini', 'Great David Copperfield', 'Great Apollo Robbins', 'Great David Devant', 'Great Shin Lim', 'Great David Blaine']

Фактический результат: ['Harry Houdini', 'David Copperfield', 'Apollo Robbins', 'David Devant', 'Shin Lim', 'David Blaine']

Заранее спасибо за объяснение моей ошибки! Всем добра!


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

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

Варианта решения вашей задачи два:

Список можно изменять напрямую, обращаясь к его индексам

name_magicians = ['Harry Houdini', 'David Copperfield', 'Apollo Robbins', 'David Devant', 'Shin Lim', 'David Blaine']

def make_great(names):
    for i, e in enumerate(names):
        names[i] = "Great " + e

make_great(name_magicians)
print(name_magicians)

Если нужно изменять список с заранее известным наименованием, можно обратиться к нему, как к глобальной переменной (это довольно костыльное решение, от которого лучше отказаться)

name_magicians = ['Harry Houdini', 'David Copperfield', 'Apollo Robbins', 'David Devant', 'Shin Lim', 'David Blaine']

def make_great():
    global name_magicians
    for i, e in enumerate(name_magicians):
        name_magicians[i] = "Great " + e

make_great()
print(name_magicians)

Оба решения дают результат:

['Great Harry Houdini', 'Great David Copperfield', 'Great Apollo Robbins', 'Great David Devant', 'Great Shin Lim', 'Great David Blaine']
→ Ссылка