986 Stimmen

Listenverständnis vs. Karte

Gibt es einen Grund, die Verwendung von map() über das Listenverständnis oder umgekehrt? Ist eine der beiden Methoden generell effizienter oder gilt sie als pythonischer als die andere?

1voto

Tanvi Penumudy Punkte 163

enter image description here

Bildquelle: © Experfy

Sie können selbst sehen, was besser ist - List Comprehension und die Map-Funktion

(List Comprehension benötigt für die Verarbeitung von 1 Million Datensätzen weniger Zeit als eine Map-Funktion)

Hoffentlich hilft das! Viel Glück :)

0voto

lmiguelvargasf Punkte 50452

Ich denke, dass die meisten Pythonic Weg ist, eine Liste Verständnis anstelle von verwenden map y filter . Der Grund dafür ist, dass Listenverständnisse klarer sind als map y filter .

In [1]: odd_cubes = [x ** 3 for x in range(10) if x % 2 == 1] # using a list comprehension

In [2]: odd_cubes_alt = list(map(lambda x: x ** 3, filter(lambda x: x % 2 == 1, range(10)))) # using map and filter

In [3]: odd_cubes == odd_cubes_alt
Out[3]: True

Wie Sie sehen, erfordert eine Verständigung keine zusätzlichen lambda Ausdrücke wie map braucht. Außerdem ermöglicht ein Verständnis auch eine einfache Filterung, während map erfordert filter um eine Filterung zu ermöglichen.

0voto

HoD Punkte 26

Mein Anwendungsfall:

def sum_items(*args):
    return sum(args)

list_a = [1, 2, 3]
list_b = [1, 2, 3]

list_of_sums = list(map(sum_items,
                        list_a, list_b))
>>> [3, 6, 9]

comprehension = [sum(items) for items in iter(zip(list_a, list_b))]

Ich fand mich ab mehr Karte zu verwenden, dachte ich Karte könnte langsamer als comp aufgrund von Pass und Return Argumente, das ist, warum ich diesen Beitrag gefunden.

Ich glaube, dass die Verwendung von map viel lesbarer und flexibler sein könnte, insbesondere wenn ich die Werte der Liste konstruieren muss.

Man versteht es, wenn man es liest, wenn man die Karte benutzt hat.

def pair_list_items(*args):
    return args

packed_list = list(map(pair_list_items,
                       lista, *listb, listc.....listn))

Dazu kommt der Flexibilitätsbonus. Und danke für alle anderen Antworten, plus die Leistungsprämie.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X