python 数组引用未从数组中删除元素
python array reference not removing element from the array
我在一个方法中向数组引用添加和删除元素,我发现虽然元素被添加到引用数组但它没有被删除。
def check(arr):
arr.append(1)
arr = arr[:-1]
arr = [1]
check(arr)
print(arr)
给出输出 [1, 1]
我想知道为什么 arr = arr[:-1]
不从引用的数组中删除
编辑:很多人都发布了正确的解决方案,我不是在寻找解决方案,而是解释 python 为什么以及如何创建局部变量而不是覆盖全局范围以及如何它以相同的名称维护两者!
你什么都不return。函数中的arr在局部范围内,所以全局范围的arr不会更新
def check(arr):
arr.append(1)
return arr[:-1]
arr = [1]
arr = check(arr)
print(arr)
或者可以使用全局变量来完成:
def check_arr():
global arr
arr.append(1)
arr = arr[:-1]
arr = [1]
check_arr()
print(arr)
正如我在 comment, if you need in-place list modification, you can apply slice notation 中指出的:
def check(arr):
arr.append(1)
arr[:] = arr[:-1]
但实际上这段代码只会删除最后一项 (你在上面添加了一行),所以你可以只使用 del
:
def check(arr):
arr.append(1)
del arr[-1]
我在一个方法中向数组引用添加和删除元素,我发现虽然元素被添加到引用数组但它没有被删除。
def check(arr):
arr.append(1)
arr = arr[:-1]
arr = [1]
check(arr)
print(arr)
给出输出 [1, 1]
我想知道为什么 arr = arr[:-1]
不从引用的数组中删除
编辑:很多人都发布了正确的解决方案,我不是在寻找解决方案,而是解释 python 为什么以及如何创建局部变量而不是覆盖全局范围以及如何它以相同的名称维护两者!
你什么都不return。函数中的arr在局部范围内,所以全局范围的arr不会更新
def check(arr):
arr.append(1)
return arr[:-1]
arr = [1]
arr = check(arr)
print(arr)
或者可以使用全局变量来完成:
def check_arr():
global arr
arr.append(1)
arr = arr[:-1]
arr = [1]
check_arr()
print(arr)
正如我在
def check(arr):
arr.append(1)
arr[:] = arr[:-1]
但实际上这段代码只会删除最后一项 (你在上面添加了一行),所以你可以只使用 del
:
def check(arr):
arr.append(1)
del arr[-1]