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]
,
我不知道为什么原始数组没有更改,因为该函数没有返回新数组
答案 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