Seite 1 von 1
Produkt einer Sequenz - pythonisch
Verfasst: Dienstag 28. September 2010, 03:06
von Klip
Hallo,
ich habe neulich eine
Euler Aufgabe gelöst und bin dabei über eine Stelle im Code gestolpert die sich überhaupt nicht pythonisch anfühlt. Wie kann ich diesen Code eleganter schreiben?
Code: Alles auswählen
results = [1, 1, 3, 7, 12, 5]
product = 1
for i in results:
product *= i
print product
Bei Addition würde ich `sum()` verwenden, doch was mache ich, wenn ich das Produkt einer Sequenz haben will?
Ich würde mich sehr über Ideen und Hinweise freuen
Beste Grüße,
Klip
Re: Produkt einer Sequenz - pythonisch
Verfasst: Dienstag 28. September 2010, 04:16
von gkuhl
Hi,
du kannst das wie folgt lösen (
Quelle):
Code: Alles auswählen
>>> from operator import mul
>>> data = [1, 1, 3, 7, 12, 5]
>>> product = reduce(mul, data)
>>> print product
1260
Grüße
Gerrit
Re: Produkt einer Sequenz - pythonisch
Verfasst: Dienstag 28. September 2010, 12:08
von Klip
Hallo gkuhl,
ah! Ja genau! Super, das habe ich gesucht

Vielen Dank. Die verlinkte Seite ist ebenfalls interessant.
Beste Grüße,
Klip
Re: Produkt einer Sequenz - pythonisch
Verfasst: Dienstag 28. September 2010, 20:39
von problembär
@Klip: Ich bin der Meinung, daß Dein ursprünglicher Code wesentlich "pythonischer" ist, weil ich ihn, im Gegensatz zu dem von gkuhl, sofort verstehe.
Ich hoffe, Du gewöhnst Dir da nicht künstlich das falsche an.
Re: Produkt einer Sequenz - pythonisch
Verfasst: Dienstag 28. September 2010, 20:57
von /me
problembär hat geschrieben:@Klip: Ich bin der Meinung, daß Dein ursprünglicher Code wesentlich "pythonischer" ist, weil ich ihn, im Gegensatz zu dem von gkuhl, sofort verstehe.
Um es böse auszudrücken kann das Programmierwissen eines durchschnittlichen PHP-Coders nicht der Maßstab für Verständlichkeit des Codes sein. reduce und map sind so wunderbare Sprachkonstrukte, dass sie einem nach dem ersten eigenen sinnvollen Verwenden immer wieder als elegante Lösung einfallen.
Re: Produkt einer Sequenz - pythonisch
Verfasst: Dienstag 28. September 2010, 21:09
von BlackJack
Ich würde die `reduce()`-Lösung nicht als "pythonischer" bezeichnen, aber auf jeden Fall als eleganter. Python bietet IMHO genau die richtige Mischung aus Bausteinen der objektorientierten und funktionalen Programmierung. Python setzt insgesamt ja sehr stark auf das Iterator/"iterable"-Konzept und `map()`, `reduce()` und der Inhalt vom `itertools`-Modul erlauben es zusammen mit Generatorfunktionen sehr schön "datenstrom-orientierte" Lösungen zu formulieren.
Re: Produkt einer Sequenz - pythonisch
Verfasst: Mittwoch 29. September 2010, 03:17
von gkuhl
Man kann auch auf `mul` verzichten und stattdessen `lambda` verwenden. `reduce` als built-in sollte man eigentlich kennen. Wobei ich die Existenz auch mal wieder verdrängt hatte:
Re: Produkt einer Sequenz - pythonisch
Verfasst: Samstag 2. Oktober 2010, 10:35
von Panke
Der Verzicht auf operator.mul ist da aber ein Rückschritt bei der Lesbarkeit.
Re: Produkt einer Sequenz - pythonisch
Verfasst: Samstag 2. Oktober 2010, 10:43
von numerix
Panke hat geschrieben:Der Verzicht auf operator.mul ist da aber ein Rückschritt bei der Lesbarkeit.
Sehe ich nicht so. Ob da nun "mul" steht oder eine so einfache selbst definierte Funktion, macht m.E. keinen Unterschied. Wenn irgendjemand damit Schwierigkeiten hat, dann eher wegen des reduce() an sich, das doch befremdlich wirken kann, wenn man funktionales Programmieren nicht kennt.
Re: Produkt einer Sequenz - pythonisch
Verfasst: Donnerstag 7. Oktober 2010, 09:03
von Panke
Ich find's halt lesbarer, wenn da eine Funktion steht, deren Verhalten mir bekannt ist, als wenn ich mir erst noch
überlegen muss, was das für eine anonyme Funktion ist. Das mag in diesem konkreten Beispiel keinen großen Unterschied machen, aber prinzipiell sehe ich das schon so.