通过将列表传递给函数来修改python中的列表

通过将列表传递给函数来修改python中的列表,python,list,function,Python,List,Function,我有以下python代码: def make_great(l): l = ['The great ' + magician for magician in l] magicians = ['Tom'] make_great(magicians) print(magicians) print语句打印原始列表,而不是由make_great()函数修改的列表。我试图找到一种方法来修改python列表中的每个元素,而不显式地访问它的索引,然后为索引重新分配一个新值。魔术师列表现在不是指向了基

我有以下python代码:

def make_great(l):
    l = ['The great ' + magician for magician in l]

magicians = ['Tom']
make_great(magicians)
print(magicians)

print语句打印原始列表,而不是由
make_great()
函数修改的列表。我试图找到一种方法来修改python列表中的每个元素,而不显式地访问它的索引,然后为索引重新分配一个新值。
魔术师列表现在不是指向了基于Python内存模型的理解所形成的新列表吗?我猜我没有得到预期的结果,因为这是一个范围问题?但是当我传入
魔术师
时,它会替换函数参数中的
l
,因此python解释器实际上会看到
魔术师=['the…

当您将其分配给
l
时,您正在重新定义
l
,而不是修改它。请改用
l[:]

def make_great(l):
    l[:] = ['The great ' + magician for magician in l]
您还可以返回列表并重新定义
魔术师

def make_great(l):
    return ['The great ' + magician for magician in l]

magicians = ['Tom']
magicians = make_great(magicians)
print(magicians)
在这种情况下,您可以将
魔术师
分配给
make_great(['Tom'])


您的函数没有返回任何内容。您可以在函数中使用print语句,也可以返回修改后的列表,然后将其打印出来

def make_great(l):
    return ['The great ' + magician for magician in l]

magicians = ['Tom']
magicians = make_great(magicians)
print(magicians)
make_great函数复制您的数组,因此您需要返回并将结果分配给魔术师


您可以检查是否在函数中传递引用或值

问题是您正在修改局部变量
l
以引用新对象。相反,您应该修改
l
引用的对象。当我使用索引符号时,
l[I],我感到困惑
要修改列表,为什么不将其视为局部变量,但当我使用
=
操作符将
魔术师
重新分配到新列表时,它现在被视为局部变量?@MutatingAlgorithm考虑将
l
变量名重命名为
lst
或其他可读性更好的名称,因为它可以防止与数字混淆
1
def make_great(l):
    return ['The great ' + magician for magician in l]

magicians = ['Tom']
magicians = make_great(magicians)
print(magicians)