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.
Antworten
zed leppelin
User
Beiträge: 16
Registriert: Dienstag 29. Oktober 2002, 15:04
Wohnort: Berlin

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

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

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

Vielen Dank.
--
this is zed
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Code: Alles auswählen

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

Gruss
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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
-------------------------------------------------------------------------------

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

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
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

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:

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

Ah, da hat jemand Mulitaccs ;)
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

sape hat geschrieben:Ah, da hat jemand Mulitaccs ;)
wie hast Du das rausbekommen?
Du hast doch keine Admin rechte oder doch?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten