Slicing list inside a method (Python 3)

对着背影说爱祢 提交于 2020-01-02 11:14:33

问题


I have a method like the following:

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

    return 

I have a test for it like the following:

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

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

The output I get is not what I expected for, in the sense that the list is not ultimately edited

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

But when I do an append to the list, it does edit the list for good, as this example shows:

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)

Which gives the following output:

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

Why does the slice not change the list for good?


回答1:


Try this instead:

my_list[:] = my_list[:slice_point]

Your old method just points the name my_list at a new object, i.e. at the copy returned by the slice.

The suggestion I've proposed above, however, modifies the object which my_list originally pointed at without rebinding that name.



来源:https://stackoverflow.com/questions/38775048/slicing-list-inside-a-method-python-3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!