通过将列表传递给函数来修改python中的列表
我有以下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列表中的每个元素,而不显式地访问它的索引,然后为索引重新分配一个新值。魔术师列表现在不是指向了基
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)