2016-12-15 3 views
0

Angenommen, wir haben eine Liste von ganzen Zahlen L in Python, und eine Funktion F, die eine ganze Zahl übernimmt und einen booleschen Wert zurückgibt. Ich habe den folgenden Code:Suche durch Liste und tun basierend auf Prädikat in Python

for i in L: 
    if F(i): 
     do_whatever(i) 

ist es eine Möglichkeit, dies in Python in einer Zeile zu tun, oder besser gesagt, einen pythonic Ansatz?

+1

'[foo (i) für i in L, wenn bar (i)]' –

+1

eine Zeile: 'für i in L: Wenn F (i) : do_whatever (i) ' –

+4

Ihr aktueller Ansatz scheint ziemlich pythonisch zu sein; nicht alles ist für 1 Zeile gedacht –

Antwort

1

mit den eingebauten in Python Funktionen:

map(do_whatever, filter(F, L)) 
+0

Obwohl das erstellt eine neue Liste (oder ist es ein Iterator), die möglicherweise nicht erforderlich sein. Ich würde zuerst die Map verwenden und dann später über den Performance-Hit nachdenken, wenn es ein Problem wurde. Und in Python3 erhalten Sie einen Iterator, also müssen Sie ihn konsumieren, um etwas zu tun. –

Verwandte Themen