Maison > Article > développement back-end > Plusieurs méthodes pour supprimer les doublons des listes en python
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!