Vous avez une liste de nombres et vous devez effectuer de multiples opérations de suppression à la fois au début et à la fin de cette liste. Écrivez une fonction supprime_extremites qui prend une liste de nombres et un entier n, représentant le nombre d'éléments à supprimer à partir de chaque extrémité de la liste. La fonction doit retourner la liste restante après suppression. L'objectif est de montrer l'efficacité de l'utilisation de deque pour cette tâche par rapport à une liste normale.
Voici un exemple de résolution de cet exercice sans l'utilisation de deque :
def supprime_extremites(liste, n):
while n > 0:
liste.pop(0)
liste.pop()
n -= 1
return liste
Exemple
>>> liste = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> supprime_extremites(liste, 3)
[4, 5, 6]
Pour enlever un élément en partant du début avec un objet deque, vous pouvez utiliser la méthode popleft.
code Code
from collections import deque
def supprime_extremites(liste, n):
# Utilisation de deque pour une suppression efficace
d = deque(liste)
while n > 0:
d.popleft() # Rapide car ne nécessite pas de décaler les éléments
d.pop()
n -= 1
return list(d)
comment Explications
Dans la première version sans deque, chaque opération pop(0) entraîne un coût élevé car elle décale tous les éléments de la liste d'une position, ce qui est une opération en O(n).
La seconde version utilise deque qui permet des suppressions rapides aux deux extrémités de la collection sans décalage des autres éléments, rendant chaque opération de suppression en temps constant, O(1).
star Points importants
-
Les opérations
pop(0)sur une liste sont coûteuses car elles nécessitent de décaler tous les éléments suivants. -
La classe
dequeoffre une alternative efficace avec des méthodespopleft()etpop()qui exécutent des suppressions en temps constant aux extrémités de la collection.
def supprime_extremites(liste, n):
# Écrivez un code optimisé qui utilise l'objet deque du module collections
passfrom collections import deque
def supprime_extremites(liste, n):
d = deque(liste)
while n > 0:
d.popleft()
d.pop()
n -= 1
return list(d)Console
Un instant...
Résultats
Test avec différentes listes
assert supprime_extremites([1, 2, 3, 4, 5, 6, 7, 8, 9], 3) == [4, 5, 6] assert supprime_extremites([10, 20, 30, 40, 50], 2) == [30] assert supprime_extremites([1, 2, 3, 4], 1) == [2, 3] assert supprime_extremites([], 0) == [] assert supprime_extremites([1, 2], 1) == []
Bravo, tu as réussi cet exercice de code 🥳
Envoyer ma solution
Vous avez trouvé une solution alternative pour cet exercice ? Proposez votre solution à la communauté 👇
Ma solution :




