使用函数更改列表的值

时间:2018-12-23 20:36:41

标签: python python-3.x

我有一个预定义的列表,我想在函数结束时成为“新”列表。

例如

x = [4, 5, 6]
y = [1, 2, 3]

我想要的是该功能:

extend_list_x(x, y)

为此

x = [1, 2, 3, 4, 5, 6]

我尝试返回join_list,但是我不能更改x的值

x = [4, 5, 6]
y = [1, 2, 3]

def extend_list_x(x, y):
    joined_list = [*y, *x]
    global x 
    x = joined_list
    return x

extend_list_x(x, y)

目前这是我的问题

SyntaxError: name 'x' is parameter and global

3 个答案:

答案 0 :(得分:1)

  • 首先,不惜一切代价避免使用global函数。函数具有参数。使用它们(并可能返回值)
  • 然后,在返回新列表或修改第一个列表之间进行选择:

这得益于左手的切片符号,x就地改变了:

def extend_list_x(x, y):
    x[:] = y+x

甚至更好,不要完全分配x,而是使用部分切片分配重用先前的x值。只需告诉python将右手内容放在之前索引0(由于目标长度为<len(y),因为它为0,所以先前的元素将被移动):

def extend_list_x(x, y):
    x[:0] = y

像这样打电话:

extend_list_x(x,y)

此列表创建一个新列表并返回,而x保持不变

def extend_list_x(x, y):
    return y+x

像这样打电话:

x = extend_list_x(x,y)

答案 1 :(得分:0)

由于x是可变的,因此不需要使用global,这很糟糕;)。

def prepend(x,y):
    z=y+x # construct the final result and store it in a local variable
    x.clear() # global x is now []
    x.extend(z) # "copy" z in x

会做。

答案 2 :(得分:0)

如果要创建新列表,可以简单地使用加法运算符:

def joiner(x,y):
    return x+y

如果要保留相同的列表,则可以使用列表extend()方法:

def joiner(x,y):
    return x.extend(y)