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

时间:2016-02-26 00:27:18

标签: 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列表的每个元素,而不显式访问它的索引,然后重新分配该索引一个新值。 magicians列表现在不会指向基于Python内存模型的理解形成的新列表吗?我猜我没有得到理想的结果,因为这是一个范围问题?但是当我传入magicians时,它会替换函数参数中的l,以便python解释器实际看到magicians = ['The ...

3 个答案:

答案 0 :(得分:3)

当您将其分配给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)

答案 1 :(得分:0)

你的功能没有返回任何东西。您可以在函数中使用print语句,也可以返回修改后的列表然后将其打印

答案 2 :(得分:0)

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

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

make_great函数复制数组,因此您需要返回并将结果分配给魔术师。

您可以检查How do I pass a variable by reference?是否在函数中传递引用或值