在方法内部切片列表(Python 3)

时间:2016-08-04 18:40:41

标签: python list python-3.4 slice

我有以下方法:

def slice_list(my_list, slice_point):
    my_list = my_list[:slice_point]
    print("Inside method: ", my_list)

    return 

我对它进行了测试,如下所示:

if __name__ == "__main__":
    my_list = [1,2,3,4,5]
    slice_point = 3

    slice_list(my_list, slice_point)
    print("Outside method: ", my_list)

我得到的输出不是我预期的,因为列表最终没有被编辑

>>>Inside method:  [1, 2, 3]
>>>Outside method:  [1, 2, 3, 4, 5]

但是当我对列表进行append时,它会对列表进行良好编辑,如下例所示:

def append_to_list(my_list, element):
    my_list.append(element)
    print("Inside method: ", my_list)

    return 

if __name__ == "__main__":
    my_list = [1,2,3,4,5]
    append_to_list(my_list, "new element")
    print("Outside method: ", my_list)

其中给出了以下输出:

>>>Inside method:  [1, 2, 3, 4, 5, 'new element']
>>>Outside method:  [1, 2, 3, 4, 5, 'new element']

为什么切片不会改变列表?

1 个答案:

答案 0 :(得分:3)

请改为尝试:

my_list[:] = my_list[:slice_point]

您的旧方法只是将名称my_list指向新对象,即切片返回的副本。

然而,我上面提出的建议修改了my_list最初指向的对象而没有重新绑定该名称。