-1
votes

Pourquoi les modifications d'une liste à l'intérieur d'une fonction ne modifient pas la liste?

J'écris un programme pour supprimer les éléments dupliqués d'une liste triée donnée. J'ai écrit la fonction "supprimée" pour effectuer des modifications sur la liste et imprimer la liste mise à jour à la fin de la fonction. Étant donné que la liste est adoptée par référence, la question est de savoir pourquoi les modifications ne s'appliquent pas sur la liste en dehors de la fonction.

def removeDuplicates(nums):
    c = 0
    nums = nums + [nums[-1] + 1]  # add a dummy element to the end of the list
    for i in range(len(nums) - 1):
        if nums[i] != nums[i + 1]:
            nums[c] = nums[i]
            c = c + 1
    nums.pop()
    print(nums)

if __name__ == "__main__":
    nums = [1, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5]
    removeDuplicates(nums)
    print(nums)


0 commentaires

4 Réponses :


3
votes

Votre problème est dans la ligne:

nums.append(nums[-1] + 1)


0 commentaires

2
votes
[1, 2, 3, 4, 5, 3, 4, 4, 4, 5, 5]

0 commentaires

0
votes

C'est parce que si votre deuxième ligne dans enlevez-vous code>: xxx pré>

ceci fait une nouvelle copie du paramètre de liste nums code> qui a été transmis Par référence, et vos opérations de désen-duping modifient la copie au lieu de la liste d'origine. p>

Votre fonction a également d'autres problèmes, sans cette ligne, je reçois la sortie: P>

>>> nums = [1, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5]
>>> removeDuplicates(nums)
[1, 2, 3, 4, 2, 3, 4, 4, 4, 5]


0 commentaires

0
votes

Comme mentionné dans les autres réponses, le problème est lorsque vous ajoutez un élément factice. Vous créez une nouvelle copie de la variable nums . Pour éviter cela, vous pouvez utiliser la méthode np.append () suggéré ici ou simplement remplacer xxx

avec xxx

De cette façon, vous ne créerez pas une nouvelle liste.


0 commentaires