Ich habe eine Methode, die eine Liste nehmen und geben ein ObjektPython: Wie man lokale Variable im Listenverstehen einstellt?
# input a list, returns an object
def map_to_obj(lst):
a_list = f(lst)
return a_list[0] if a_list else None
ich eine Liste zu bekommen, die alle abgebildeten Elemente enthält, die nicht None
ist.
So:
v_list = [v1, v2, v3, v4]
[map_to_obj(v) for v in v_list if map_to_obj(v)]
Aber es scheint nicht gut, die map_to_obj
Methode zweimal in der Liste das Verständnis zu nennen.
Gibt es eine Möglichkeit, lokale Variablen im Listenverständnis zu haben, damit sie eine bessere Leistung haben?
Oder optimiert der Compiler es automatisch? Hier
ist das, was ich will:
(sml like)
[let mapped = map_to_obj(v) in for v in v_list if mapped end]
Es ist eine gute Antwort. Antworten sollten keine Fragezeichen haben. – Paul
Es ist eine gute Antwort, und natürlich ist es das gleiche wie [behzad] (http://stackoverflow.com/users/625914/behzad-nouri) 's, mit List Comprehensions anstelle von 'map' und' filter' ... Ich werde upvote, wie ich mochte [Lying Dog] (http: // stackoverflow.com/users/4134826/lying-dog) übersetzt "Filter" in Bezug auf l-c, aber das OP kann eine dieser Antworten entweder als gute, nützliche Antworten genehmigen. – gboffi
Das innere Verständnis sollte ein Generatorausdruck sein. Es ist nicht nötig, die gesamte Liste zu erstellen und erst dann die leeren Gegenstände wegzuwerfen, um eine weitere Liste zu erstellen. –