Maison > développement back-end > Tutoriel Python > Python implémente la suppression des doublons d'une séquence tout en gardant l'ordre des éléments inchangé

Python implémente la suppression des doublons d'une séquence tout en gardant l'ordre des éléments inchangé

不言
Libérer: 2018-10-15 14:15:33
avant
2518 Les gens l'ont consulté

Ce que cet article vous apporte concerne l'implémentation par Python de la suppression des doublons d'une séquence et du maintien de l'ordre des éléments. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. aide.

1. Exigences

Nous souhaitons supprimer les éléments en double qui apparaissent dans la séquence, tout en conservant l'ordre des éléments restants inchangé.

Si vous souhaitez simplement supprimer les doublons, un moyen assez simple consiste généralement à créer un ensemble :

a=[1,5,4,36,7,8,2,3,5,7]
#结果为:{1, 2, 3, 4, 5, 36, 7, 8}
print(set(a))
Copier après la connexion

Solution

Si dans le séquence La valeur est hachable, alors ce problème peut être facilement résolu en utilisant des collections et des générateurs.

Si un objet est hachable, alors il doit être immuable pendant sa durée de vie et il doit avoir une méthode __hash__(). Les entiers, les nombres à virgule flottante, les chaînes et les éléments sont tous immuables.
def dedupe(items):
    seen=set()
    for item in items:
        if item not in seen:
            yield item
            seen.add(item)

a=[1,2,3,1,9,1,5,10]
print(list(dedupe(a)))
Copier après la connexion

Résultat de l'exécution :

[1, 2, 3, 9, 5, 10]
Copier après la connexion

Cela ne peut être fait que si les éléments de la séquence sont hachables. Si vous souhaitez supprimer les doublons de la séquence d'objets non hachables, vous devez modifier légèrement le code ci-dessus :

def dedupe(items,key=None):
    seen=set()
    for item in items:
        value=item if key is None else key(item)
        if value not in seen:
            yield item
            seen.add(value)

a=[
    {'x':1,'y':2},
    {'x':1,'y':3},
    {'x':1,'y':4},
    {'x':1,'y':2},
    {'x':1,'y':3},
    {'x':1,'y':1},

]
print(list(dedupe(a,key=lambda d:(d['x'],d['y']))))

print(list(dedupe(a,key=lambda d:d['y'])))
Copier après la connexion

Résultats d'exécution :

[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 4}, {'x': 1, 'y': 1}]
[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 4}, {'x': 1, 'y': 1}]
Copier après la connexion

La fonction de la clé de paramètre ici est pour spécifier Une fonction qui convertit les éléments d'une séquence en un type hachable afin de détecter les doublons.

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!

Étiquettes associées:
source:segmentfault.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal