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?
Antworten
Zu viele Anzeigen?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.
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.
- See previous answers
- Weitere Antworten anzeigen