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
Libérer: 2024-12-01 09:37:09
original
503 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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)]
Copier après la connexion

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]
Copier après la connexion

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]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal