Heim  >  Artikel  >  Backend-Entwicklung  >  Python dedupliziert Werte in der Listenstruktur

Python dedupliziert Werte in der Listenstruktur

高洛峰
高洛峰Original
2017-03-02 17:08:391377Durchsuche

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: 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]


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!


Stellungnahme:
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