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]
Afficher l'aide

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 deque offre une alternative efficace avec des méthodes popleft() et pop() 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
    pass
from 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...
terminal

Résultats

/ 1 tests validés

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é 👇

Seules les propositions différentes de la solution proposée par Docstring peuvent être envoyées.

Ma solution :

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.