Maison >développement back-end >Tutoriel Python >Comment pouvons-nous supprimer efficacement les doublons consécutifs d'une liste tout en préservant les éléments uniques en Python ?

Comment pouvons-nous supprimer efficacement les doublons consécutifs d'une liste tout en préservant les éléments uniques en Python ?

DDD
DDDoriginal
2024-12-11 19:12:12125parcourir

How Can We Efficiently Remove Consecutive Duplicates from a List While Preserving Unique Elements in Python?

Élimination des doublons consécutifs et préservation des éléments distincts

Lorsque vous travaillez avec des listes, il est souvent nécessaire d'éliminer les éléments consécutifs en double. La question se pose : comment pouvons-nous supprimer efficacement de tels éléments tout en préservant des éléments distincts ?

Une approche consiste à parcourir la liste, en comparant chaque élément avec son successeur. S'ils sont identiques, nous supprimons l'élément courant. Cette méthode, bien que fonctionnelle, est relativement inefficace et manque d'élégance pythonique.

Utiliser GroupBy pour une suppression élégante des doublons

Le module Python itertools fournit une fonction puissante appelée groupby qui peut regrouper efficacement des éléments consécutifs. En utilisant groupby, nous pouvons atteindre notre objectif avec moins de lignes de code et une clarté accrue.

Pour la première partie de la question (trouver des éléments uniques), nous pouvons utiliser groupby pour regrouper des éléments consécutifs, puis sélectionner les clés (qui représentent des éléments uniques).

from itertools import groupby

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

Résultat :

[1, 2, 3, 4, 5, 1, 2]

Préserver les éléments distincts à l'aide Somme

Pour affiner davantage la solution, nous devons éliminer les éléments qui ont des doublons consécutifs. Encore une fois, groupby vient à notre aide. En vérifiant la longueur de chaque groupe, nous pouvons déterminer si un élément est distinct ou non.

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

Sortie :

[2, 3, 5, 1, 2]

Alternativement, nous pouvons utiliser une expression génératrice pour éviter de créer une liste temporaire pour chaque groupe et calculez à la place la somme du générateur :

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

Cela permet une mise en œuvre plus compacte et efficace de la solution, éliminant efficacement les doublons consécutifs tout en en préservant les éléments distincts.

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