Ich bin heute auf ein Problem gestoßen und habe nach einer beiläufigen Aufforderung eines Kollegen die Funktion itertools.groupby verwendet. Letztendlich war dieses Ding jedoch nutzlos.
Das Problem besteht darin, die News-IDs in einer Liste zu deduplizieren und sicherzustellen, dass die Reihenfolge nach der Deduplizierung unverändert bleibt.
Intuitive Methode
Die einfachste Idee ist:
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
Dies funktioniert, aber es sieht nicht cool genug aus.
Set verwenden
Eine andere Lösung ist die Verwendung von Set:
ids = [1,4,3,3,4,2,3,4,5,6,1] ids = list(set(ids))
Die Folge ist, dass die ursprüngliche Reihenfolge nicht beibehalten wird.
Erneut nach Index sortieren
Endlich so gelöst:
ids = [1,4,3,3,4,2,3,4,5,6,1] news_ids = list(set(ids)) news_ids.sort(ids.index)
Mit itertools .grouby
Der Artikel erwähnte itertools.grouby am Anfang. Wenn Sie die Reihenfolge der Liste nicht berücksichtigen, können Sie Folgendes verwenden:
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
Über das Prinzip von itertools.groupby können Sie hier lesen: //m.sbmmt.com/
Use Reduce
Netizen hat eine Nachricht zu einer anderen Lösung hinterlassen. Ich habe hier hinzugefügt und erklärt:
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]
Das Obige ist der Code, den ich in ipython ausführe, mit dem Lambda darin it x,y:x wenn y in x sonst ist x + [y] äquivalent zu Lambda x,y: y in x und x oder x+[y] .
Die Idee besteht darin, zuerst die IDs in [[], 1,4,3,...] zu ändern und dann die Reduzierungsfunktion zu verwenden. Eine Erklärung zum Reduzieren finden Sie hier: http://docs.python.org/2/library/functions.html#reduce
Mehr Python führt Operationen an Werten durch in der Listenstruktur Für Artikel zum Thema Deduplizierung achten Sie bitte auf die chinesische PHP-Website!