Typenumwandlung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
zed leppelin
User
Beiträge: 16
Registriert: Dienstag 29. Oktober 2002, 15:04
Wohnort: Berlin

Typenumwandlung

Beitragvon zed leppelin » Dienstag 13. Februar 2007, 10:25

Hallo,

ich will eine Liste mit Zahlen (Strings) umwandeln in eine Liste mit Integern und mache das so:

Code: Alles auswählen

zahlen = ['2','3','5','7','8','9']

zahlen_ints = [int(item)
               for item in zahlen]


Geht das auch direkter. Evtl sogar ohne eine neue Liste zu erzeugen?

Vielen Dank für Tips.

Zed
--
this is zed
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Re: Typenumwandlung

Beitragvon sape » Dienstag 13. Februar 2007, 10:33

zed leppelin hat geschrieben:[...]
Evtl sogar ohne eine neue Liste zu erzeugen?
[...]


So,

Code: Alles auswählen

zahlen = ['2','3','5','7','8','9']
zahlen = [int(item) for item in zahlen]


oder so.

Code: Alles auswählen

zahlen = ['2','3','5','7','8','9']
zahlen = map(int, zahlen)
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 13. Februar 2007, 10:38

[wiki]Tutorial/Listen[/wiki] :lol:

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Dienstag 13. Februar 2007, 10:56

jens hat geschrieben:[wiki]Tutorial/Listen[/wiki] :lol:
Und das hat mit der Frage, genau was zu tun?
zed leppelin
User
Beiträge: 16
Registriert: Dienstag 29. Oktober 2002, 15:04
Wohnort: Berlin

Beitragvon zed leppelin » Dienstag 13. Februar 2007, 11:20

Vielen Dank.
--

this is zed
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Typenumwandlung

Beitragvon Leonidas » Dienstag 13. Februar 2007, 15:12

sape hat geschrieben:
zed leppelin hat geschrieben:[...]
Evtl sogar ohne eine neue Liste zu erzeugen?
[...]


So,

Code: Alles auswählen

zahlen = ['2','3','5','7','8','9']
zahlen = [int(item) for item in zahlen]


oder so.

Code: Alles auswählen

zahlen = ['2','3','5','7','8','9']
zahlen = map(int, zahlen)

Erstellt aber beides neue Listen, ersteres ist eigentlich der gleiche Code den der OP schon im ersten Beitrag geschrieben hat.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Dienstag 13. Februar 2007, 16:10

Hi

Code: Alles auswählen

for x,value in enumerate(zahlen):
    zahlen[x] = int(value)


So?

Gruss
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 13. Februar 2007, 16:21

Dann schauen wir doch mal:

Code: Alles auswählen

from benchmark import Benchmark

def f1(loops):
    for i in xrange(loops):
        zahlen = ['2','3','5','7','8','9']
        zahlen = [int(item) for item in zahlen]

def f2(loops):
    for i in xrange(loops):
        zahlen = ['2','3','5','7','8','9']
        for x,value in enumerate(zahlen):
            zahlen[x] = int(value)

loops = 100000
bench = Benchmark()
bench.add_function(f1, "LC", loops)
bench.add_function(f2, "enumerate", loops)

bench.run()
bench.print_ranking()

benchmark.py ist: http://paste.pocoo.org/show/83/ siehe http://www.python-forum.de/viewtopic.php?p=58861#58861

Ergebnis:
[Die Laufzeit wird ermittelt]
run: f1 - LC OK (0.60sec.)
run: f2 - enumerate OK (0.64sec.)

[Ranking wird erzeugt]
Ranking wurde erzeugt.
-------------------------------------------------------------------------------
Funktion: f2 - enumerate ist am langsamsten; Zeit: 0.640705 sec
Funktion: f1 - LC ist um 6.38% schneller; Zeit: 0.602306 sec
-------------------------------------------------------------------------------

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

Beitragvon Luzandro » Dienstag 13. Februar 2007, 16:28

Benchmark ist hier aber IMHO relativ egal - einen Unterschied macht es allerdings, wenn du mehrere Referenzen darauf hast und den Inhalt ändern willst, anstatt "zahlen" an etwas anderes zu binden
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 13. Februar 2007, 16:32

Kommt halt darauf an, was man machen möchte ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Re: Typenumwandlung

Beitragvon sape » Dienstag 13. Februar 2007, 17:47

Leonidas hat geschrieben:[...]
Erstellt aber beides neue Listen, ersteres ist eigentlich der gleiche Code den der OP schon im ersten Beitrag geschrieben hat.
Ja, ganz korrekt betrachtet wird eine neue Liste in beiden Varianten erstellt und an den bisherigen Namen gebunden. Hängt aber davon ab von welcher Ebene man das betrachten **möchte** und wie man seine Frage nun interpretieren möchte.

Und ich habe das halt von der Ebene betrachtet,
Evtl sogar ohne eine neue Liste zu erzeugen?
dass halt keine liste erzeugt wird die an einen neuen Namen gebunden wird wie hier...

Code: Alles auswählen

zahlen = ['2','3','5','7','8','9']

zahlen_ints = [int(item)
               for item in zahlen]


...sondern das der bisherige Name ``zahlen`` beibehalten wird für die neue Liste.


Ich weiß nicht ob man nun die Frage so penible auffasen sollte, wie Du, da ich mit 90%iger Wahrscheinlichkeit davon ausgehen das er das gar nicht so meinte?


Aber korrekterweise wird (Vereinfacht dargestellt) über das Objekt das an den Namen Zahlen gebunden ist iteriert und in ein neues Objekt transferiert. Dieses neue Objekt wird an den Namen ``Zahlen`` gebunden. Da nun kein anderer Name auf das alte Objekt zeigt, fällt es dem GC zu opfer. -- In wie Fern ist da aber nun relevant das so penibel zu betrachten?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Typenumwandlung

Beitragvon Leonidas » Dienstag 13. Februar 2007, 17:54

sape hat geschrieben:Ich weiß nicht ob man nun die Frage so penible auffasen sollte, wie Du, da ich mit 90%iger Wahrscheinlichkeit davon ausgehen das er das gar nicht so meinte?

Ich finde das gar nichgt mal so penibel - ich unterstelle dem OP mal, dass auf den tollen Trick die alte Liste mit der neuen er auch schon gekommen wäre. Ist ja nichts besonderes.

Code: Alles auswählen

a = 1
a = 2

Oha!
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Re: Typenumwandlung

Beitragvon sape » Dienstag 13. Februar 2007, 17:57

Leonidas hat geschrieben:[...]

Code: Alles auswählen

a = 1
a = 2

Oha!
Warum Oha?
Redprince
User
Beiträge: 128
Registriert: Freitag 22. Oktober 2004, 09:22
Wohnort: Salzgitter
Kontaktdaten:

Re: Typenumwandlung

Beitragvon Redprince » Dienstag 13. Februar 2007, 18:12

Moinsen...
sape hat geschrieben:Warum Oha?

Leonidas hat geschrieben:Ist ja nichts besonderes.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Re: Typenumwandlung

Beitragvon sape » Dienstag 13. Februar 2007, 19:03

Ah, da hat jemand Mulitaccs ;)

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]