Seite 1 von 1
Typenumwandlung
Verfasst: Dienstag 13. Februar 2007, 10:25
von zed leppelin
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
Re: Typenumwandlung
Verfasst: Dienstag 13. Februar 2007, 10:33
von sape
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)
Verfasst: Dienstag 13. Februar 2007, 10:38
von jens
[wiki]Tutorial/Listen[/wiki]
Verfasst: Dienstag 13. Februar 2007, 10:56
von sape
jens hat geschrieben:[wiki]Tutorial/Listen[/wiki]
Und das hat mit der Frage, genau was zu tun?
Verfasst: Dienstag 13. Februar 2007, 11:20
von zed leppelin
Vielen Dank.
Re: Typenumwandlung
Verfasst: Dienstag 13. Februar 2007, 15:12
von Leonidas
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.
Verfasst: Dienstag 13. Februar 2007, 16:10
von rayo
Hi
Code: Alles auswählen
for x,value in enumerate(zahlen):
zahlen[x] = int(value)
So?
Gruss
Verfasst: Dienstag 13. Februar 2007, 16:21
von jens
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
-------------------------------------------------------------------------------
Verfasst: Dienstag 13. Februar 2007, 16:28
von Luzandro
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
Verfasst: Dienstag 13. Februar 2007, 16:32
von jens
Kommt halt darauf an, was man machen möchte
Re: Typenumwandlung
Verfasst: Dienstag 13. Februar 2007, 17:47
von sape
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?
Re: Typenumwandlung
Verfasst: Dienstag 13. Februar 2007, 17:54
von Leonidas
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.
Oha!
Re: Typenumwandlung
Verfasst: Dienstag 13. Februar 2007, 17:57
von sape
Leonidas hat geschrieben:[...]
Oha!
Warum Oha?
Re: Typenumwandlung
Verfasst: Dienstag 13. Februar 2007, 18:12
von Redprince
Moinsen...
sape hat geschrieben:Warum Oha?
Leonidas hat geschrieben:Ist ja nichts besonderes.
Re: Typenumwandlung
Verfasst: Dienstag 13. Februar 2007, 19:03
von sape
Ah, da hat jemand Mulitaccs
Re: Typenumwandlung
Verfasst: Dienstag 13. Februar 2007, 19:26
von pyStyler
sape hat geschrieben:Ah, da hat jemand Mulitaccs
wie hast Du das rausbekommen?
Du hast doch keine Admin rechte oder doch?
Re: Typenumwandlung
Verfasst: Dienstag 13. Februar 2007, 20:35
von Leonidas
sape hat geschrieben:Ah, da hat jemand Mulitaccs
Habe jetzt einige Zeit gebraucht um zu verstehen was Mulitaccs sein soll. Wie dem auch sei, Redprince hat genau das angesprochen was ich mit meinem Post gemeint habe.