[Python-de] such performance optimieren ???

frankimmich at gmx.de frankimmich at gmx.de
Sam Aug 30 13:19:05 CEST 2003


Hallo und schon mal Danke 
für den Tipp..
ich werde das Montag gleich mal mir Dictionarys ausprobieren..
Entschuldigt auch den schlecht formatierten Code...
Das kam alles durch die Kopiererei zwischen Unix und Win...
Soll nicht wieder vorkommen...
Das mitr python 1.5 kann ich leider nicht ändern..

Danke und schönes WE.
Grüße Frank 



> Hallo Frank,
> 
> der Code unten ist wüst formatiert, aber ich denke, ich
> verstehe das Problem anhand deiner Beschreibung :-)
> 
> frankimmich at gmx.de wrote:
> > ich habe hier eine relativ simple Aufgabe...es funktioniert auch alles
> > nur leider zu langsam...vielleicht kann mir einer einen Tip gebe, wie
> ich 
> > das ganze beschleunigen kann...
> > 
> > Ich habe 3 Listen:
> > 
> > Bsp. List1:
> > 
> > a1|b1
> > c1|d3
> > e3|i4
> > ...
> > 
> > List2:
> > 
> > a1|111
> > t1|222
> > e3|555
> > ....
> > 
> > Liste3:
> > 
> > w6|666
> > u8|777
> > b1|888
> > ....
> > 
> > Ablauf: Durchlaufe Liste1...also:a1|b1    (=1. Linie)
> >     Suche a1 in Liste2, wenn gefunden suche b1 in Liste3 und 
> >     gib jeweils das Pärchen aus, also
> >     a1 -> 111, b1 -> 888
> 
> Zumindest der Lookup in der zweiten und dritten Liste schreit
> geradezu nach Dictionaries, - vorausgesetzt, die linken Seiten
> treten nicht mehrfach auf. Da du aber ohnehin nur nach dem
> ersten Vorkommen der Schlüssel (hier a1 und b1) suchst, ist es
> effektiv wohl egal, ob diese mehrfach vorkommen.
> 
> Mit anderen Worten: du solltest die Listen 2 und 3 beim Einlesen
> (bzw. Erzeugen) in Dictionaries umwandeln bzw. als solche
> erzeugen, dann gehen die folgenden Lookups mit konstanter
> Geschwindigkeit, O(1).
> 
> Aus deiner dargestellten Liste 2 würde also das Dictionary
> {'a1': '111', 't1': '222', 'e3': '555'} , zu erzeugen mit
> d = dict( [item.split('|') for item in liste2] ) . Falls du
> tatsächlich Python 1.5 verwenden willst/musst, kannst du das
> auch mit map/lambda oder einer expliziten Schleife machen. Ich
> empfehle dir allerdings, möglichst auf Python 2.x umzusteigen.
> 
> Viele Grüße
>   Stefan
> 

-- 
COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test
--------------------------------------------------
1. GMX TopMail - Platz 1 und Testsieger!
2. GMX ProMail - Platz 2 und Preis-Qualitätssieger!
3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post