Programmatisches Äquivalent zu uniq

30/08/2010 - 11:28 von Tobias Klausmann | Report spam
Moin,

Ich schreibe derzeit viel Code, der als Endresultat Listen
ausgibt. In selbigen möchte ich Duplikate vermeiden. Ich könnte
zwar beim Erstellen Duplikate so vermeiden:

for somestuff in otherstuff:
[...]
if newentry not in resultlist:
resultlist.append(newentry)

resultlist.sort()
[... Listenausgabe ...]

Das wird aber bei làngeren Listen (wie ich sie habe) beliebig
langsam.

Daher benutze ich derzeit das hier:

for somestuff in otherstuff:
resultlist.append(newentry)

resultlist=list(set(resultlist))
resultlist.sort()
[... Listenausgabe ...]

Speicherprobleme habe ich derzeit keine, ich erwarte sie auch
nicht - selbst mit 10x mehr Listeneintràgen sind die
Zielmaschinen sicherlich nicht überfordert. Das ist akzeptabel
schnell, aber mich deucht, das ginge auch besser. Vorschlàge?

Gruss,
Tobias
 

Lesen sie die antworten

#1 Philipp Pagel
30/08/2010 - 11:37 | Warnen spam
Tobias Klausmann wrote:
In selbigen möchte ich Duplikate vermeiden. Ich könnte
zwar beim Erstellen Duplikate so vermeiden:

for somestuff in otherstuff:
[...]
if newentry not in resultlist:
resultlist.append(newentry)

resultlist.sort()
[... Listenausgabe ...]




[...]

for somestuff in otherstuff:
resultlist.append(newentry)

resultlist=list(set(resultlist))
resultlist.sort()
[... Listenausgabe ...]



Ich würde einfach von Anfang an mit einem set arbeiten und erst zum Schluß in
eine Liste verwandeln (falls das überhaupt erforderlich ist):

result = set()
for somestuff in otherstuff:
result.add(newentry)
result = list(resultset)
result.sort()

cu
Philipp

Dr. Philipp Pagel
Lehrstuhl f. Genomorientierte Bioinformatik
Technische Universitàt München
http://webclu.bio.wzw.tum.de/~pagel/

Ähnliche fragen