Seite 2 von 2
Re: Reduce
Verfasst: Mittwoch 3. April 2013, 12:04
von fail
Code: Alles auswählen
def _all(iterable):
return reduce(lambda acc,y: False if not acc else (True if y else False),
iterable,True)
def _any(iterable):
return reduce(lambda acc,y: True if acc else (True if y else False),
iterable,False)
Re: Reduce
Verfasst: Mittwoch 3. April 2013, 13:33
von BlackJack
@fail: Boah, ist das gruselig. Es gibt logische Verknüpfungen und die `bool()`-Funktion.
Code: Alles auswählen
def all_(iterable):
return reduce(lambda x, acc: acc and bool(x), iterable, True)
def any_(iterable):
return reduce(lambda x, acc: acc or bool(x), iterable, False)
Wobei das auch wieder nix für den produktiven Einsatz wäre, denn im Gegensatz zu den echten `all()` und `any()` werten diese beiden immer das komplette `iterable` aus, auch wenn das Ergebnis schon unwiderruflich feststeht.
Re: Reduce
Verfasst: Donnerstag 4. April 2013, 18:20
von fail
@BlackJack Reduce ist doch ein left fold daher ist das linke argument der funktion der accumulator?
Re: Reduce
Verfasst: Donnerstag 4. April 2013, 18:47
von BlackJack
@fail: Ich hätte es doch testen sollen.

Re: Reduce
Verfasst: Montag 6. April 2015, 20:26
von Üpsilon
Sorry, dass ich das hier wieder ausgrabe, ahaber es ist irre relevant, dass man mit reduce auch Listen sortieren kann. Und dafür braucht man nur eine Zeile,
die allerdings völlig unlesbar ist.
Code: Alles auswählen
def sortieren(liste):
return reduce(lambda acc, i: filter(lambda j: j<=i, acc)+[i]+filter(lambda j: j>i, acc), liste, [])

Re: Reduce
Verfasst: Dienstag 7. April 2015, 07:51
von Leonidas
Was ist denn dran unlesbar? Das ist eher irre ineffizient, aber ansonsten ist das recht logisch aufgebaut.
Re: Reduce
Verfasst: Montag 4. Mai 2015, 17:16
von Üpsilon
Mit Reduce kann man auch Geldautomaten programmieren:
Code: Alles auswählen
scheine = [5,10,20,50]
def auszahlen(betrag):
return reduce(lambda acc, schein: acc + [schein] * ((betrag-sum(acc)) // schein),
sorted(scheine, reverse=True), [])
print auszahlen(135)