列表的就地操作如何工作

时间:2017-11-26 08:45:21

标签: python-3.x

这是我的代码:

x=[1,3,2]
def foo(x):
    x.sort()
    x = x + [4,5]
    x.extend([6,7])
    return x

foo(x)
print(x)

我希望打印列表为[1,2,3,4,5,6,7],但我得到了[1,2,3]。我读到这是因为就地操作,因为它返回None,但我已经将返回x包含在我的代码中,但它仍然不起作用。

2 个答案:

答案 0 :(得分:0)

你必须告诉python在foo方法执行后打印x的返回值,你告诉python打印x,你定义为x = [1,3,2],你必须打印的值x经过foo方法后的x

x=[1,3,2]
def foo(x):
    x.sort()
    x = x + [4,5]
    x.extend([6,7])
    return x


print(foo(x))

答案 1 :(得分:0)

这里有两个问题:x的范围和返回值。

当您声明x = x + [4, 5]时,x不再是同一个列表

>>> x = [1, 2, 3]
>>> id(x)
4501926472
>>> x = x + [4, 5]
>>> id(x)
4501926616
>>> 

因此,x内的foo指的是本地 x,而不是全球 x功能。

此外,您不会存储来自x的返回foo,因此它会在所有实际情况下消失。