[Python-de] Re: Re: Re: 1,2,3,5,7,8,9 -> "1-3,5,7-9"

Peter Otten __peter__ at web.de
Die Jun 22 21:24:09 CEST 2004


Alexander 'boesi' Bösecke wrote:

>> Auf den ersten Blick kann ich nicht erkennen, dass mein Algorithmus
>> schlecht skaliert - was ich auf Grund des Pythoncodes auch nicht erwartet
>> habe. Ein zu kleiner Hauptspeicher scheidet als Ursache für die
>> schlechteren Zeiten auf deinem Rechner wohl aus - ich habe nur 256MB und
>> ausserdem benötigt Gerson() vermutlich mehr Speicher als Peter2().
> 
> Hmm und wo liegt dann die Ursache, dass deine Algorithmen auf meinem
> Rechner relativ stark einbrechen? Auch wenn die Meßergebnisse nur grobe
> Anhaltspunkte sind, so geben sie doch eine Tendenz an und sind zudem
> reproduzierbar.
> Aus deinem Prompt schließe ich, dass du ein unixiodes System verwendest,
> ich nutze WinXP - sollte hier das Problem liegen?
> Zuerst dachte ich, dass die Implementierung der Generator-Funktion unter
> Windows nicht so performant ist wie auf Unix-Systemen. Dem widerspricht
> aber Rene_x, denn der zeigt dieses Verhalten nicht.
> 

Ich habe mir Rene_x() gerade angesehen. Ich habe doch zusätzlichen
Speicherbedarf - für das Tupel zur Stringformatierung. Vielleicht kommt
Linux damit besser zurecht. Probier doch bitte mal die folgende Variante
(ich habe die Tricks von dir und Christian Tismer geklaut) auf deinem
Rechner:

<code>

def expSeries(seq):
    it = iter(seq)
    first = prev = it.next()
    # assert first >= 0
    for item in it:
        if item - prev != 1:
            if first == prev:
                yield `first`
            else:
                yield `first` + `-prev`
            first = item
        prev = item
    if first == prev:
        yield `first`
    else:
        yield `first` + `-prev`


def Peter_exp(sample):
    return ",".join(expSeries(sample))

</code>

Falls Peter_exp() besser skaliert, wäre die Ursache für den
Performanceeinbruch wohl geklärt.

Peter