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)
explaining: I want to calculate the exclusive prefix sum of array, for example if original array is [1,2,3,4], so the exclusive sum of array is [0,1,3,6], I don't know why the original array didn't change because this function didn't return a new array
3 Réponses :
Cela fonctionnera. Lorsque vous avez effectué "arr_in = [0] + arr_in", il a effectué une initialisation. Vous pouvez voir en utilisant "hex (id (arr_in))" l'adresse de la liste modifiée. Utilisez plutôt insert (0,0). Cela ne changera pas l'adresse de la liste, ce qui signifie que l'initialisation n'a pas été effectuée.
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)
Une nouvelle liste est créée lorsque vous faites arr_in = [0] + arr_in . J'ai ajouté quelques commandes d'impression pour que vous puissiez voir le changement d'identifiant de la liste. arr_in n'est pas modifié avant l'ajout de [0] au début, donc arr1 reste le même.
def prefix_sum_inplace0(arr_in):
print(id(arr_in))
n = len(arr_in)
arr_in = [0] + arr_in
print(id(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(id(arr1))
print("pre_sum_inplace0:",prefix_sum_inplace0(arr1),"original arr:",arr1)
Je change une méthode sur l'ajout et la suppression d'éléments et il fonctionnait.
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