Maison >développement back-end >Tutoriel Python >Comment puis-je supprimer efficacement les éléments consécutifs en double d'une liste Python ?

Comment puis-je supprimer efficacement les éléments consécutifs en double d'une liste Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-01 09:37:09503parcourir

How Can I Efficiently Remove Consecutive Duplicate Elements from a Python List?

Suppression d'éléments avec des doublons consécutifs

Une tâche courante dans le traitement des données consiste à éliminer les doublons consécutifs d'une liste. Une implémentation Python simple pourrait être :

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
    else:
        i = i+1

Cette approche supprime les éléments répétés, ce qui donne un résultat comme [1, 2, 3, 4, 5, 1, 2].

Éliminer les éléments dont les valeurs se répètent de manière consécutive

Cependant, un objectif amélioré consiste à supprimer des éléments entiers dont les valeurs répétez consécutivement, ce qui donne une sortie comme [2, 3, 5, 1, 2]. L'approche précédente peut être modifiée :

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0
dupe = False

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
        dupe = True
    elif dupe:
        del list[i]
        dupe = False
    else:
        i += 1

Bien que fonctionnelle, cette approche pourrait être simplifiée.

Une solution plus élégante

Python fournit plus outils expressifs pour la manipulation de listes. Utilisation d'itertools.groupby :

L = [1,1,1,1,1,1,2,3,4,4,5,1,2]
from itertools import groupby
[key for key, _group in groupby(L)]

Cela donne le résultat souhaité : [1, 2, 3, 4, 5, 1, 2].

Pour la deuxième partie de la tâche :

[k for k, g in groupby(L) if len(list(g)) < 2]

Cela utilise groupby pour regrouper les doublons consécutifs et filtre les groupes comportant plus d'un élément, supprimant ainsi efficacement les doublons. éléments.

Si vous le souhaitez, vous pouvez éviter de créer une liste temporaire en utilisant une expression génératrice :

[k for k, g in groupby(L) if sum(1 for i in g) < 2]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn