Array (vorher in String, dann) in Integer umwandeln

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.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Hab' auch noch nen Exoten:

Code: Alles auswählen

int(`[1,2,3,4]`[1:-1].replace(', ',''))
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

derdon hat geschrieben:... was wiederum eine Liste ist. itertools.imap geht auch, weil es ein Generator ist. Also reicht es doch, einfach zu sagen, dass str.join als ersten Parameter ein Iterable entgegen nimmt.
Ich wollte nur darauf hinweisen, dass hier ein map einfacher ist als eine LC oder ein Generator.
Das Leben ist wie ein Tennisball.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

hendrikS hat geschrieben:Hab' auch noch nen Exoten:

Code: Alles auswählen

int(`[1,2,3,4]`[1:-1].replace(', ',''))

Code: Alles auswählen

int(`[1,2,3,4]`[1::3])
Als Lösung eines Problems würde ich das jetzt aber nicht bezeichnen ^^
Das Leben ist wie ein Tennisball.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Interessant finde ich auch die Geschwindigkeit:

Code: Alles auswählen

int(''.join(map(str, [1,2,3,4]))) 3.31524557677
int(`[1,2,3,4]`[1::3]) 3.41262371509
int(''.join(str(i) for i in [1,2,3,4])) 6.62247130779
reduce(lambda x, y: x*10+y, [1,2,3,4])  1.59843743317
sum(v*10**i for i, v in enumerate(reversed([1,2,3,4]))) 3.67390827048
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Bei der ganzen Diskussion sollte man aber nicht aus dem Auge verlieren, dass einige der gezeigten Varianten - u.a. die reduce-Variante - nur dann funktionieren, wenn sich in der Liste ausschließlich Ziffern befinden. Ursprünglich ging es um "Integerwerte" (aber vielleicht waren ja auch nur Ziffern gemeint ...)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

jbs hat geschrieben:Interessant finde ich auch die Geschwindigkeit:

Code: Alles auswählen

int(''.join(map(str, [1,2,3,4]))) 3.31524557677
int(`[1,2,3,4]`[1::3]) 3.41262371509
int(''.join(str(i) for i in [1,2,3,4])) 6.62247130779
reduce(lambda x, y: x*10+y, [1,2,3,4])  1.59843743317
sum(v*10**i for i, v in enumerate(reversed([1,2,3,4]))) 3.67390827048
Ich wollte gerade sagen, das reduce() so schnell ist, weil die Schleife in C implementiert wurde und daher eine sinnvolle Funktion ist, aber das kann man dank des lambda und des Funktionsaufrufes wohl vergessen.

Code: Alles auswählen

>>> min(timeit.repeat('reduce(lambda x, y: x*10+y, [1,2,3,4])'))
2.3062410354614258
>>> min(timeit.repeat('i=0\nfor n in [1,2,3,4]: i=i*10+n'))
1.3086600303649902
Mein neuer Favorit ist daher:

Code: Alles auswählen

i=0
for n in [1,2,3,4]:
  i=i*10+n
+lesbar; +schnell; -kein Einzeiler
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

mkesper hat geschrieben:Interessant, wie Guido 2005 darüber dachte...
Interessant, dass auch map und filter verschwinden sollten. Ich glaube dann wäre die Akzeptanz von Py3 gegen NULL gegangen.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@Defnull: Stimme dir zu, die for Variante sieht wesentlich besser aus. Warum muß es auch unbedingt ein Einzeiler sein?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

hendrikS hat geschrieben:Interessant, dass auch map und filter verschwinden sollten. Ich glaube dann wäre die Akzeptanz von Py3 gegen NULL gegangen.
Och, ich hätte das mit gesteigerter Akzeptanz wieder ausgeglichen ... ;-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

hendrikS hat geschrieben:Interessant, dass auch map und filter verschwinden sollten. Ich glaube dann wäre die Akzeptanz von Py3 gegen NULL gegangen.
Wieso? Ich bin ja auch in der Lisp-Ecke beheimatet und ob ich ``ifilter`` aus den ``itertools`` hole (bei Python 2) oder ``filter`` aus den ``itertools`` holen würde (bei Python 3) wäre mir recht egal.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Leonidas hat geschrieben:Wieso? Ich bin ja auch in der Lisp-Ecke beheimatet und ob ich ``ifilter`` aus den ``itertools`` hole (bei Python 2) oder ``filter`` aus den ``itertools`` holen würde (bei Python 3) wäre mir recht egal.
Verstehe die Antwort nicht so richtig. Aber mir wäre es auch egal, so lange es verfuegbar ist. Ich mache von allen angesprochenen Funktionen regen Gebrauch.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

hendrikS hat geschrieben:Aber mir wäre es auch egal, so lange es verfuegbar ist. Ich mache von allen angesprochenen Funktionen regen Gebrauch.
Also der fett geschriebene Text im Blogeintrag sagt, dass sich da nichts von Belang ändern wird.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

hendrikS hat geschrieben:soll t en
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Ich bin mir sicher, dass man auch ohne die beiden genannten Funktionen noch wundervollen Python-Code schreiben könnte.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Antworten