Возможно ли с помощью функции содержащей цикл изменить содержимое списка? (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']