【问题标题】:Slicing list inside a method (Python 3)在方法中切片列表(Python 3)
【发布时间】:2016-08-04 18:40:41
【问题描述】:

我有如下方法:

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']

为什么切片不会永久更改列表?

【问题讨论】:

  • 您应该阅读有关局部和全局变量的信息。除非指定为全局变量,否则在函数中创建或重新分配的任何变量都被视为局部变量。但是追加不会重新分配...
  • 另外,你的函数不是方法。

标签: python list python-3.4 slice


【解决方案1】:

试试这个:

my_list[:] = my_list[:slice_point]

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2015-02-19
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多