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

Gerson Kurz gerson.kurz at pergamon-software.de
Mit Jun 23 10:43:37 CEST 2004


Wenn ich ein bisserl rumoptimiere (inkl. eurer Tricks), komme ich letzthin
auf etwas von der Logik her ahnliches wie peter2, nur halt ohne Generatoren;
und wenn es wirklich ein problem ist, kann man ja 'ne pyd benutzen: siehe
Anhang. Meine Ergebnisse:

Anzahl Listenelemente: 500000
Anzahl Loops: 20
Laufzeit pro Loop im Schnitt:
  boesi     :    1.0696 sec (Alexander Bosecke)
  Peter     :    1.4595 sec (Peter Otten - sauber)
  Peter2    :    1.2858 sec (Peter Otten - schnell)
  Gerson    :    0.9656 sec (Gerson Kurz - schnell und leserlich)
  Gerson_pyd:    0.4391 sec (Gerson Kurz - Warum nicht gleich in
Inline-Assembler ???)

Bei meiner Losung ware noch eine Optimierung drin: inplace, dann spart man
sich den alloc am Anfang => Qualliste ist hin.  Die pyd-Losung ist naturlich
absolut fehlerinsensitiv (z.b. durfte sie bei 0 elementen absturzen - nicht
getestet schaut aber so aus).

> @Gerson: es ist nicht grad die feine Art, einbuchstabige Variablennamen
> zu verwenden.

OK,  ich habe das korrigiert!!!

def Gerson(oo):
    """Gerson Kurz - schnell und leserlich"""
    oO = [None] * len(oo)
    if oo:
        Oo = oo[0]
        o0 = Oo
        OO_ = 0
        for OO in oo:
            if OO - o0 > 1:
                if Oo != o0:
                    oO[OO_] = `Oo` + `-o0`
                else:
                    oO[OO_] = `Oo`
                OO_ += 1
                Oo = OO
            o0 = OO
        if Oo != o0:
            oO[OO_] = `Oo` + `-o0`
        else:
            oO[OO_] = `Oo`
        OO_ += 1
    return ",".join(oO[:OO_])

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde geschreddert...
Dateiname   : speedygonzales.zip
Dateityp    : application/x-zip-compressed
Dateigröße  : 6840 bytes
Beschreibung: nicht verfügbar
URL         : http://starship.python.net/pipermail/python-de/attachments/20040623/ff37030e/speedygonzales.bin