0
votes

Pourquoi mon tableau n'a pas changé la valeur d'origine après une fonction

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

0 commentaires

3 Réponses :


0
votes

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)


0 commentaires

0
votes

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)


0 commentaires

0
votes

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


0 commentaires