我有以下 python 代码:
def make_great(l):
l = ['The great ' + magician for magician in l]
magicians = ['Tom']
make_great(magicians)
print(magicians)
print 语句打印原始列表,而不是由 make_great()
函数修改的列表。我试图找出一种方法来修改 python 列表的每个元素,而无需显式访问它的索引,然后为该索引重新分配一个新值。难道magicians
列表现在不是指向基于Python内存模型的推导形成的新列表吗?我猜我没有得到预期的结果,因为这是一个范围界定问题?但是当我传入 magicians
时,它会替换函数参数中的 l
,因此 python 解释器实际上会看到 magicians = ['The ...
?
最佳答案
当您将其分配给l
时,您是在重新定义l
,而不是修改它。使用 l[:]
代替:
def make_great(l):
l[:] = ['The great ' + magician for magician in l]
您还可以返回列表并重新定义magicians
:
def make_great(l):
return ['The great ' + magician for magician in l]
magicians = ['Tom']
magicians = make_great(magicians)
print(magicians)
在这种情况下,您可以将 magicians
分配给 make_great(['Tom'])
:
magicians = make_great(['Tom'])
print(magicians)
关于python - 通过将 python 中的列表传递给函数来修改列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35641116/