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

Alexander 'boesi' Bösecke boesi.josi at gmx.net
Die Jun 22 14:52:16 CEST 2004


Hi

Am 22.06.2004 11:23:38 schrieb Christian Tismer:

> und in der Tat sind Tupel schneller erstellt, insbesondere,
> weil sie einen eigenen Objekt-Cache haben und Du in diesem
> Fall immer wieder daselbbe Objekt bekommst.

Aha. Schoen zu wissen, dass Tupel doch noch Vorteile gegenueber Listen
bieten. :) 

> Die Idee mit repr als "`" geschrieben scheint gut, spart
> Opcodes.

Ist auch nur von http://www.skymind.com/~ocrow/python_string/ geklaut.

> Probierbar wäre .append('-%d,%%d' % last % element)
> wobei ich vermute, es ist nicht viel besser. Das Tupel wird gespart,
> dafür wird zweimal formatiert.

Ist denn auch die langsamste Variante.

> Aaaber eine Sache kannst Du evtl. noch machen. Die erwünschte
> Schreibweise impliziert doch, daß die Liste keine negativen
> Zahlen enthalten kann? Also kommt auch kein "bis 0" vor.
> Dann ist es evtl. billiger, eine positive Zahl negativ zu machen:

Ich war implizit davon ausgegangen, dass negative Zahlen vorkommen
koennen, aber eigentlich hast du recht und ein klein wenig bringt auch
das noch.

Gersons Idee, statt dem append gleich mit Listindices zu arbeiten,
bringt auch nochmal rund 10%, so dass nun zwischen der langsamsten und
der schnellsten Version runde 70% liegen. Ist doch ganz ordentlich fuer
ein bisschen Spielerei :)

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

Anzahl Listenelemente: 1000000
Anzahl Loops: 100
Laufzeit pro Loop im Schnitt:
 boesi1    :    2.4279 sec (resListe.append('-%d,%d' % (last, element)))
 boesi2    :    2.5484 sec (resListe.append('-%d,%%d' % last % element))
 boesi3    :    2.0967 sec (resListe.append('-' + `last` + ',' + `element`))
 boesi4    :    2.3170 sec (resListe.extend(['-', `last`, ',', `element`]))
 boesi5    :    2.1064 sec (resListe.extend(('-', `last`, ',', `element`)))
 boesi6    :    1.8772 sec (resListe[k] = '-' + `last` + ',' + `element`)
 boesi7    :    1.7992 sec (resListe[k] = `-last` + ',' + `element`)


cu boesi
-- 
                                                     #1671 : icq-intern
Frueher hattet ihr die Freiheit zu entscheiden   #73628288 : icq-extern 
Heute seid ihr von dieser Entscheidung befreit    boesi111 : aim
                       .-==Report der Magd==-.        i171 : reallife