[Python-de] Re: 1,2,3,5,7,8,9 -> "1-3,5,7-9"
Jochen Wersdörfer
jochen-python at wersdoerfer.de
Fre Jun 18 20:21:22 CEST 2004
- Vorherige Nachricht: [Python-de] Re: 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nächste Nachricht: [Python-de] Re: 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nachrichten sortiert nach:
[ Datum ]
[ Thema ]
[ Betreff (Subject) ]
[ Autor ]
Am Freitag, 18. Juni 2004 19:10 schrieb Thorsten Kampe:
> Das was mir an deiner Lösung und der der anderen nicht gefällt ist,
> das alles in eins geschmissen wird: die Generierung der
> "Intervallenden" und die Ausgabe. So würde ich es machen:
> [...]
>
> Wie schneidet mein Programm in der Laufzeit ab?
Anzahl 40000
Laufzeit (jochen): 0.5900 sec
Laufzeit (jan): 0.2200 sec
Laufzeit (bösi): 0.1400 sec
Laufzeit (gregor): 8.7500 sec
Laufzeit (thorsten): 483.7400 sec
starttime = time.clock()
from copy import copy
def z(x, y):
if (y - 1 == x[-1]): x.append(y)
else: x.append("x");x.append(y)
return x
ml = copy(l)
ml[0] = [ml[0]]
# Markieren
e = reduce(z, ml)
#Auseinanderschneiden
m, n = [], []
for i in e:
if i == "x": m.append(("%s-%s" % (n[0], n[-1]), "%s" % n[0])[n[0] == n[-1]]);n = []
elif e[-1] == i: n.append(i);m.append(("%s-%s" % (n[0], n[-1]), "%s" % n[0])[n[0] == n[-1]])
else: n.append(i)
#Zusammenjoinen
r = ', '.join(m)
#print r
print "Laufzeit (jochen): %3.4f sec" % (time.clock() - starttime)
Der reduce-Teil gefällt mir ganz gut, der ist auch schön schnell.
Das Auseinanderschneiden ist sehr langsam, das geht bestimmt
irgendwie besser.
Gruss,
Jochen
- Vorherige Nachricht: [Python-de] Re: 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nächste Nachricht: [Python-de] Re: 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nachrichten sortiert nach:
[ Datum ]
[ Thema ]
[ Betreff (Subject)]
[ Autor ]