Seite 1 von 1

List comprehension, filter und lambda

Verfasst: Donnerstag 28. Juni 2012, 07:58
von /me
In Stackexchange stieß ich auf Code der sich mir aktuell zu so früher Stunde nicht so recht erschließen will.

Code: Alles auswählen

>>> predicates = lambda x:x<20, lambda x:x>20
>>> print [filter(pred, [25, 8, 22, 9]) for pred in predicates]
[[8, 9], [25, 22]]
Was passiert da? Oder alternativ gefragt: wie könnte ich das mit explizit definierten - also nicht anonymen - Funktionen umsetzen?

Re: List comprehension, filter und lambda

Verfasst: Donnerstag 28. Juni 2012, 08:11
von cofi
Bist du auf der Suche nach

Code: Alles auswählen

In [1]: def less_than_20(x):
   ...:     return x < 20
   ...: def greater_than_20(x):
   ...:     return x > 20
   ...: 

In [2]: print [filter(pred, [25, 8, 22, 9]) for pred in [less_than_20, greater_than_20]]
[[8, 9], [25, 22]]
?

Hier passiert nicht mehr als

Code: Alles auswählen

In [3]: predicates = [less_than_20, greater_than_20]

In [4]: res = []

In [5]: for p in predicates:
   ...:     valids = []
   ...:     for x in [25, 8, 22, 9]:
   ...:         if p(x):
   ...:             valids.append(x)
   ...:     res.append(valids)
   ...:     

In [6]: res
Out[7]: [[8, 9], [25, 22]]
Oder versteh ich dich hier falsch?

Re: List comprehension, filter und lambda

Verfasst: Donnerstag 28. Juni 2012, 08:32
von /me
cofi hat geschrieben:Oder versteh ich dich hier falsch?
Nein tust du nicht. Jetzt sehe ich es auch. Ich hatte die ganze Zeit geistig ein im Code nicht vorhandenes if im Kopf. Es ist gestern (bzw. heute morgen) zu spät geworden ...

Danke.