为什么我的数组在一个函数后没有改变原始值

时间:2020-01-24 06:57:17

标签: python python-3.x

def prefix_sum_inplace0(arr_in):
    n = len(arr_in)
    arr_in = [0] + arr_in
    arr_in.pop()
    for i in range (1, n):
        arr_in[i] = arr_in[i - 1] + arr_in[i]
    return arr_in
arr1 = [5, 4, 3, 2, 4, 7, 6, 11]
print("pre_sum_inplace0:",prefix_sum_inplace0(arr1),"original arr:",arr1)

解释:我要计算数组的互斥前缀和

例如,如果原始数组为[1,2,3,4],则数组的异和为[0,1,3,6]

我不知道为什么原始数组没有更改,因为该函数没有返回新数组

3 个答案:

答案 0 :(得分:0)

这将起作用,当您执行“ arr_in = [0] + arr_in”时,它将执行初始化。您可以使用“ hex(id(arr_in))”看到列表的地址已更改。请改用insert(0,0)。它不会更改列表的地址,这意味着未执行初始化。

def prefix_sum_inplace0(arr_in):
    n = len(arr_in)
    arr_in.insert(0,0)
    arr_in.pop()
    for i in range (1, n):
        arr_in[i] = arr_in[i - 1] + arr_in[i]
    return arr_in
arr1 = [5, 4, 3, 2, 4, 7, 6, 11]
print("pre_sum_inplace0:",prefix_sum_inplace0(arr1),"original arr:",arr1)

答案 1 :(得分:0)

执行class MyController extends CI_Model { function __construct() { parent::__construct(); } function test() { echo 'OK'; } } 时会创建一个新列表。我添加了一些打印命令,以便您可以查看列表的ID更改。在开始添加[0]之前不会修改arr_in,因此arr1保持不变。

arr_in = [0] + arr_in

答案 2 :(得分:0)

我更改了一些有关添加和删除元素的方法,并且确实起作用。

def prefix_sum_inplace0(arr_in):
    arr_in.insert(0, 0)
    del arr_in[-1]
    n = len(arr_in)
    for i in range (1, n):
        arr_in[i] = arr_in[i - 1] + arr_in[i]
    return arr_in