Seite 2 von 2

Verfasst: Donnerstag 28. Januar 2010, 17:07
von hendrikS
Hab' auch noch nen Exoten:

Code: Alles auswählen

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

Verfasst: Donnerstag 28. Januar 2010, 17:30
von EyDu
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.

Verfasst: Donnerstag 28. Januar 2010, 17:36
von EyDu
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 ^^

Verfasst: Donnerstag 28. Januar 2010, 18:39
von jbs
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

Verfasst: Donnerstag 28. Januar 2010, 18:55
von numerix
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 ...)

Verfasst: Freitag 29. Januar 2010, 11:51
von mkesper

Verfasst: Freitag 29. Januar 2010, 12:30
von Defnull
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

Verfasst: Freitag 29. Januar 2010, 12:33
von hendrikS
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.

Verfasst: Freitag 29. Januar 2010, 12:52
von jens
@Defnull: Stimme dir zu, die for Variante sieht wesentlich besser aus. Warum muß es auch unbedingt ein Einzeiler sein?

Verfasst: Freitag 29. Januar 2010, 13:12
von /me
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 ... ;-)

Verfasst: Freitag 29. Januar 2010, 16:11
von Leonidas
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.

Verfasst: Freitag 29. Januar 2010, 17:39
von hendrikS
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.

Verfasst: Freitag 29. Januar 2010, 17:52
von Leonidas
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.

Verfasst: Freitag 29. Januar 2010, 17:59
von hendrikS
hendrikS hat geschrieben:soll t en

Verfasst: Samstag 30. Januar 2010, 00:15
von Trundle
Ich bin mir sicher, dass man auch ohne die beiden genannten Funktionen noch wundervollen Python-Code schreiben könnte.