Maison >développement back-end >Tutoriel Python >Plusieurs méthodes pour supprimer les doublons des listes en python

Plusieurs méthodes pour supprimer les doublons des listes en python

不言
不言original
2018-04-09 17:30:223435parcourir

Cet article présente principalement diverses méthodes de déduplication de listes en python. Maintenant, je le partage avec tout le monde. Les amis qui en ont besoin peuvent s'y référer

J'ai rencontré un problème aujourd'hui après une invite occasionnelle d'un collègue. La fonction itertools.groupby est utilisée. Cependant, cette chose n’a finalement pas été utilisée.

Le problème est de dédupliquer les identifiants des news dans une liste, et de s'assurer que l'ordre reste inchangé après la déduplication.

Méthode intuitive

L'idée la plus simple est :


Copier le code Coder comme suit :

ids = [1,2,3,3,4,2,3,4,5,6,1]
news_ids = []
for id in ids:
    if id not in news_ids:
        news_ids.append(id)
print news_ids

C'est également possible, mais cela n'a pas l'air assez cool.

Utiliser set

Une autre solution est d'utiliser set :

Copiez le codeLe code est le suivant :

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))


Le résultat est que l'ordre initial n'est pas maintenu.

Trier à nouveau selon l'index

Enfin résolu de cette façon :

Copier le code Le code est la suivante :

ids = [1,4,3,3,4,2,3,4,5,6,1]
news_ids = list(set(ids))
news_ids.sort(ids.index)

Utilisez itertools.grouby

L'article mentionnait itertools.grouby au début, si vous ne vous souciez pas de l'ordre des liste, vous pouvez utiliser ceci :

Copier le code Le code est le suivant :

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids.sort()
it = itertools.groupby(ids)
for k, g in it:
    print k

Pour le principe de itertools.groupby, vous pouvez voir ici : http://docs.python.org/2/library/itertools.html# itertools.groupby

Internaute ajouté : Utilisez réduire

Netizen reatlk left un message avec une autre solution. J'ai ajouté et expliqué ici :

Copiez le code Le code est le suivant :

In [5]: ids = [1,4,3,3,4,2,3,4,5,6,1]
In [6]: func = lambda x,y:x if y in x else x + [y]
In [7]: reduce(func, [[], ] + ids)
Out[7]: [1, 4, 3, 2, 5, 6]


Ce qui précède est le code que j'exécute dans ipython, où Le lambda x,y:x if y in x else x + [y] est équivalent au lambda x,y: y in x and x ou x+[y] .

L'idée est d'abord de changer les identifiants en [[], 1,4,3,...], puis d'utiliser la fonction de réduction. Voir ici pour l'explication de réduction : http://docs.python.org/2/library/functions.html#reduce

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