Python Can';t无法正确更改列表中的项目

Python Can';t无法正确更改列表中的项目,python,Python,所以我在做一件相当简单的工作。 我有一份魔术师名单: magicians_1 = ["Merlin","Harry Potter","Sabrina"] def show_magicians(magicians): for magician in magicians: print(magician) 功能show_魔术师的目标是打印出魔术师的姓名: magicians_1 = ["Merlin","Harry Potter","Sabrina"] def show_

所以我在做一件相当简单的工作。 我有一份魔术师名单:

magicians_1 = ["Merlin","Harry Potter","Sabrina"]
def show_magicians(magicians):
    for magician in magicians:
        print(magician)
功能show_魔术师的目标是打印出魔术师的姓名:

magicians_1 = ["Merlin","Harry Potter","Sabrina"]
def show_magicians(magicians):
    for magician in magicians:
        print(magician)
但我的目标是编写一个函数,通过在名称末尾添加“TheGreat”来更改魔术师的名称:

def make_great(magicians):
   for magician in magicians:
       magician = magician.replace(magician, magician + " the Great")
   return(magician)
这就是我想到的。但是,如果我调用函数make_great with the list magicats_1,然后调用show_magicats()with magicats_1,则名称保持不变

如果我在make_great()中打印()魔术师而不是返回它,它会打印出正确的名称。但这不是功能的目标。我想永久改变名字


所以我的问题是,我如何通过呼叫show_魔术师来更改名称并打印出正确的结果

只需重新绑定循环变量即可。实际上,您必须重新绑定列表索引。例如:

def make_great(magicians):
    for i, magician in enumerate(magicians):
        magicians[i] = magician + " the Great"
除了虚假的
return
语句外,您的代码大致相当于以下内容,这使得它更加明显:

for i in range(len(magicians)):
    magician = magicians[i]
    magician = something  # why would magicians[i] be affected by this line?

这是因为您正在使用for…in循环。这意味着
魔术师
魔术师[i]
上物品的副本。要修改数组中的项,需要使用索引引用原始数组

def make_great(magicians):
   for i in range(len(magicians)):
       magicians[i] = magicians[i] + " the Great"
   return(magician)

这里有几个问题:

  • 在for循环中有一个返回,这意味着函数将返回第一个值
  • 您传递的列表不会更改,因为您没有更改其值
  • 我不认为你需要在这里替换,你可以在列表项上迭代,并在每个项上添加“伟大的”,尽管我找不到这样做的理由。只要有:
    for i in range(len(魔术师)):魔术师[i]=魔术师[i]+“the Great”

  • 其他人已经回答了为什么您最初的解决方案不起作用。下面是另一个可行解决方案的示例,这个示例使用列表理解

    def make_great(magicians):
        magicians = [r + ' the Great' for r in magicians]
        return magicians
    

    函数第二个版本中的
    return
    语句结束了列表中姓氏的
    for
    循环。@accdias已在editOK中修复。我想您现在需要返回
    魔术师
    ,而不仅仅是
    魔术师