[Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"
René Liebscher
R.Liebscher at gmx.de
Mon Jun 21 15:13:59 CEST 2004
- Vorherige Nachricht: [Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nächste Nachricht: [Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nachrichten sortiert nach:
[ Datum ]
[ Thema ]
[ Betreff (Subject) ]
[ Autor ]
Alexander 'boesi' Bösecke wrote:
> Hi
>
> Am 21.06.2004 12:26:21 schrieb Hartmut Goebel:
>
>
>>Und wieder zwei Bytecode-Instruktionen gespart :-)
>
>
> Und es geht noch schneller :)
> Wenn man statt str(element) `element` verwendet.
Stimmt, und deshalb habe ich meine Variante mit dem Generator auch noch
mal angepasst.
Das läuft dann mehr als doppelt so schnell, wenn man die map/str
Kombination weglässt und die Konversion in Strings schon in der Funktion
ausführt.
Anzahl 300000
Laufzeit (Rene,y2): 3.0700 sec # mit reduce
Laufzeit (Rene,x): 2.6200 sec # mit Generator und map/str
Laufzeit (Rene,x2): 1.1600 sec # mit Generator und ``
Damit dürfte ich wieder an Peter's Zeiten dran sein ;-)
MfG
Rene
##################################
def x2(data):
minus=0
last=data[0]
# erstes ausgeben
yield `data[0]`
for i in data[1:]:
# wenn das ein Nachfolger ist
if i-1 == last:
# minus ist schon mal ausgegeben?
if minus:
pass
else:
# dann eben jetzt erstmal
yield '-'
minus=1
last = i
else:
# kein Nachfolger
# also x-y abschliessen, y ausgeben
if minus:
yield `last`
minus =0
# trennkomma ausgeben
yield ','
# Neues Element ausgeben
yield `i`
last = i
# da fehlt der abschluss noch
if minus:
yield `last`
r = string.join(x2(l),"")
###################################
- Vorherige Nachricht: [Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nächste Nachricht: [Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nachrichten sortiert nach:
[ Datum ]
[ Thema ]
[ Betreff (Subject)]
[ Autor ]