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!