【问题标题】:python array reference not removing element from the arraypython数组引用未从数组中删除元素
【发布时间】:2022-01-15 16:12:38
【问题描述】:

我在方法中向数组引用添加和删除元素,我发现虽然元素被添加到引用数组中,但它没有被删除。

def check(arr):
    arr.append(1)
    arr = arr[:-1]

arr = [1]
check(arr)
print(arr)

给出输出[1, 1] 我想知道为什么arr = arr[:-1] 没有从引用的数组中删除

编辑:很多人都在发布正确的解决方案,我不是在寻找解决方案,而是解释 python 为什么以及如何创建局部变量而不是覆盖全局范围以及它如何通过同名!

【问题讨论】:

  • arr = arr[:-1] 这将创建一个名为arr 局部变量。它不影响原来的论点。
  • arr[:] = arr[:-1](针对这种特殊情况) del arr[-1]
  • 您没有array,而是list。这两个是不同的。

标签: python arrays list reference


【解决方案1】:

正如我已经在this评论中指出的那样,如果您需要就地修改列表,您可以申请slice notation

def check(arr):
    arr.append(1)
    arr[:] = arr[:-1]

但实际上这段代码只会删除最后一项(你在上面添加了一行),所以你可以使用del

def check(arr):
    arr.append(1)
    del arr[-1]

【讨论】:

【解决方案2】:

也可以使用全局变量来完成:

def check_arr():
    global arr
    arr.append(1)
    arr = arr[:-1]

arr = [1]
check_arr()
print(arr)

【讨论】:

【解决方案3】:

你不返回任何东西。函数中的arr是局部作用域,所以全局作用域arr不会更新

def check(arr):
    arr.append(1)
    return arr[:-1]

arr = [1]
arr = check(arr)
print(arr)

【讨论】:

  • 正确:在这种情况下,func 参数 arr 会影响全局 var arr。
猜你喜欢
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 2015-06-12
  • 2011-10-31
  • 2020-04-28
  • 2013-11-21
相关资源
最近更新 更多