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

不言
Libérer: 2018-04-09 17:30:22
original
3469 Les gens l'ont consulté

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
Copier après la connexion

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))
Copier après la connexion


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)
Copier après la connexion

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
Copier après la connexion

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]
Copier après la connexion


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!

Étiquettes associées:
source:php.cn
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