2010-04-02 4 views
5

lassen Sie uns sagen, dass ich eine Liste habenWie überprüfe ich die einzelnen Elemente in einer Liste am effizientesten?

li = [{'q':'apple','code':'2B'}, 
     {'q':'orange','code':'2A'}, 
     {'q':'plum','code':'2A'}] 

Was ist der effizienteste Weg, um die Anzahl der eindeutigen „Codes“ in dieser Liste zurückzukehren? In diesem Fall ist der eindeutige Code 2, da nur 2B und 2A eindeutig sind.

Ich könnte alles in eine Liste aufnehmen und vergleichen, aber ist das wirklich effizient?

+2

Duplizieren Sie alle diese: http://StackOverflow.com/search?q=%5Bpython%5D+duplicate+list. Genauer gesagt: http://stackoverflow.com/questions/1143379/removing-duplicates-from-list-of-lists-in-python –

Antwort

8

Wahrscheinlich die effizienteste einfache Art und Weise ist eine Reihe von Codes zu erzeugen, die uniques herausfiltert, dann die Anzahl der Elemente in diesem Satz erhalten:

count = len(set(d["code"] for d in li)) 

Wie immer, rate ich keine Sorgen zu machen über diese Art von Effizienz, es sei denn, Sie haben Ihre Leistung gemessen und gesehen, dass es ein Problem ist. Normalerweise denke ich nur über Code Klarheit beim Schreiben dieser Art von Code, und dann kommen Sie zurück und straffen es nur, wenn ich profiliert habe und ich brauche, um die Leistung zu verbessern.

+0

Ja, Set ist, was ich gesucht habe. Vielen Dank. – TIMEX

+1

FWIW als Sets in Python eingeführt wurden, war dies ein neuartiges Konzept für mich. Ich fand es sehr nützlich, die Mathe hinter den Sätzen zu lesen, die alles miteinander verbinden: http://en.wikipedia.org/wiki/Set_(mathematics) – jathanism

+2

Um das Einzigartige einer * Gruppe * zu nehmen, ist es immer O (n), da du jedes Element betrachtet hast, außer du hast noch andere Insider-Informationen. –

Verwandte Themen