Python dedupliziert Werte in der Listenstruktur

高洛峰
Freigeben: 2017-03-02 17:08:39
Original
1387 Leute haben es durchsucht

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
Nach dem Login kopieren


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))
Nach dem Login kopieren


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)
Nach dem Login kopieren


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
Nach dem Login kopieren


Über das Prinzip von itertools.groupby können Sie hier lesen: http://www.php.cn/
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]
Nach dem Login kopieren


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!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage