xrange kann mehr als man glaubt!

Code-Stücke können hier veröffentlicht werden.
Antworten
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hallo,

ich hab gerade mein PyXO so erweitert, daß auch xrange-Objekte ordentlich gespeichert und geladen werden können. Dabei hab ich etwas mit xrange rumgespielt und bemerkenswerte Eigenschaften entdeckt.

Code: Alles auswählen

>>> a = xrange(10,0,-2)
>>> len(a)
5
>>> a[3]
4
>>> a[-2]
4
>>> import copy
>>> b = copy.copy(a)
>>> print a
xrange(10, 0, -2)
>>> print b
xrange(10, 0, -2)
Ausser slicing und ändern oder erweitern kann xrange so sehr oft und effizient eine Liste von Integern mit fester Schrittweite ersetzen.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

ja, xrange ist sehr nuetzlich :)

erwaeht werden sollte auch, dass sie bei zaehlschleifen auch schneller als range ist.

auf bald
oenone
if you don't remember something, it never happened.
if you aren't remembered, you never existed.
i don't quite understand what love is like... but if there was someone who liked me, i'd be happy.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ist es möglich mit einem Befehl anzugeigen, wieviel Speicher range(5000) und xrange(5000) belegt???
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi jens,

hmm da müsste man den Speicherverbrauch mit einem Tool überwachen. jedenfalls braucht range(5000) den Speicher für ein list-Objekt und dann noch für 5000 int-Objekte, range liefert ja eine fertige Liste mit Integerwerten. xrange(5000) braucht nur den Speicher für ein xrange-Objekt also nur den Bruchteil von range.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Schade, ich dachte es gibt da noch einen Befehl, den ich noch nicht kenne ;)

Eigentlich kann man also besser immer xrange() nehmen...
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Ja du kannst immer xrange nehmen, ausser du brauchst wirklich eine Liste. Ich tu mir schon schwer nur range zu tippen, meine Finger tippen schon automatisch xrange ;)


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi, ja das haben sie im Rahmen von Python 2.3 eingeführt, dass xrange __len__ und indizies unterstützt, damit du slicen kannst und umgekehrt iterieren... Finde ich ein wenig umständlich, aber nützlich. Man könnte dast dazu übergehen, range einfach nur als list(xrange(...)) zu definieren :wink: .
Antworten