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é

不言
不言avant
2018-10-15 14:15:332505parcourir

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))

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)))

Résultat de l'exécution :

[1, 2, 3, 9, 5, 10]

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'])))

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}]

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer