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)
4 Réponses :
Votre problème est dans la ligne:
nums.append(nums[-1] + 1)
[1, 2, 3, 4, 5, 3, 4, 4, 4, 5, 5]
C'est parce que si votre deuxième ligne dans ceci fait une nouvelle copie du paramètre de liste Votre fonction a également d'autres problèmes, sans cette ligne, je reçois la sortie: P> enlevez-vous code>:
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>
>>> nums = [1, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5]
>>> removeDuplicates(nums)
[1, 2, 3, 4, 2, 3, 4, 4, 4, 5]
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 code> nums code>. Pour éviter cela, vous pouvez utiliser la méthode avec p> De cette façon, vous ne créerez pas une nouvelle liste. p> p> np.append () code> suggéré ici ou simplement remplacer