Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Utnyttja Map() och Listförståelser | Förbättra Prestanda med Inbyggda Verktyg
Optimeringstekniker i Python

bookUtnyttja Map() och Listförståelser

När det är möjligt är det bättre att använda inbyggda funktioner, metoder eller biblioteksfunktioner istället för att skapa algoritmer från grunden. Inbyggda och biblioteksfunktioner är vanligtvis optimerade för prestanda, körs mer effektivt och är utformade för att hantera ett brett spektrum av specialfall på ett effektivt sätt.

Låt oss börja med kraftfulla verktyg som funktionen map() och listkomprehensioner, vilka kan avsevärt snabba upp din kod. Eftersom listkomprehensioner är mer optimerade för prestanda och map() är implementerad i C, körs de generellt snabbare än manuellt skrivna loopar.

Listkomprehensioner

Listkomprehensioner erbjuder ett mer koncist och ofta snabbare sätt att skapa listor jämfört med traditionella for-loopar. Dessutom kan de göra din kod enklare att läsa och förstå.

Låt oss jämföra prestandan mellan en for-loop och en listkomprehension genom att generera en lista där varje tal från 1 till 10000000 multipliceras med 2:

123456789101112131415161718192021
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator numbers = list(range(1, 10000001)) @timeit_decorator(number=3) def list_comprehension(): return [x * 2 for x in numbers] @timeit_decorator(number=3) def for_loop(): result = [] for x in numbers: result.append(x * 2) return result list_1 = list_comprehension() list_2 = for_loop() print(list_1 == list_2)
copy

Använda map()

Funktionen map tillämpar en angiven funktion på varje element i en iterable (t.ex. en lista).

Förutom att vara mer koncis än att skriva loopar, körs den ofta snabbare tack vare C-nivåoptimeringar i dess implementation, vilket minskar overheaden av upprepade funktionsanrop.

Även om map kan ge vissa prestandafördelar, särskilt vid arbete med inbyggda funktioner, är skillnaden i hastighet jämfört med listkomprehensioner ofta försumbar. Båda är mycket optimerade, och för enkla operationer är prestandafördelen med map knappt märkbar. I praktiken bör valet mellan de två baseras mer på läsbarhet och specifika användningsfall, såsom minnes­effektivitet med map.

Låt oss jämföra prestandan för map, for-loopar och listkomprehensioner när vi formaterar 1000000 kundnamn till versal inledningsbokstav (t.ex. 'john doe' -> 'John Doe'):

1234567891011121314151617181920212223242526
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator customer_names = ['john doe', 'jane smith', 'alex johnson', 'ivan smith'] * 250000 @timeit_decorator(number=10) def map_function(): return list(map(str.title, customer_names)) @timeit_decorator(number=10) def list_comprehension(): return [name.title() for name in customer_names] @timeit_decorator(number=10) def for_loop(): result = [] for name in customer_names: result.append(name.title()) return result formatted_with_map = map_function() formatted_with_comprehension = list_comprehension() formatted_with_for_loop = for_loop() print(formatted_with_map == formatted_with_comprehension == formatted_with_for_loop)
copy

Som förväntat är for-loopen det långsammaste tillvägagångssättet av de tre. I detta exempel visade sig map vara snabbare än listkomprehension, även om prestandan i praktiken kan variera beroende på det specifika användningsfallet. Ibland kan listkomprehensioner till och med överträffa map, särskilt för enklare uttryck.

question mark

Vilket av följande påståenden om listkomprehensioner och map() är korrekt?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 1

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Suggested prompts:

Can you explain how the timeit_decorator works in these examples?

What are the main advantages of using map over list comprehensions?

When should I choose a for loop instead of map or list comprehensions?

Awesome!

Completion rate improved to 7.69

bookUtnyttja Map() och Listförståelser

Svep för att visa menyn

När det är möjligt är det bättre att använda inbyggda funktioner, metoder eller biblioteksfunktioner istället för att skapa algoritmer från grunden. Inbyggda och biblioteksfunktioner är vanligtvis optimerade för prestanda, körs mer effektivt och är utformade för att hantera ett brett spektrum av specialfall på ett effektivt sätt.

Låt oss börja med kraftfulla verktyg som funktionen map() och listkomprehensioner, vilka kan avsevärt snabba upp din kod. Eftersom listkomprehensioner är mer optimerade för prestanda och map() är implementerad i C, körs de generellt snabbare än manuellt skrivna loopar.

Listkomprehensioner

Listkomprehensioner erbjuder ett mer koncist och ofta snabbare sätt att skapa listor jämfört med traditionella for-loopar. Dessutom kan de göra din kod enklare att läsa och förstå.

Låt oss jämföra prestandan mellan en for-loop och en listkomprehension genom att generera en lista där varje tal från 1 till 10000000 multipliceras med 2:

123456789101112131415161718192021
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator numbers = list(range(1, 10000001)) @timeit_decorator(number=3) def list_comprehension(): return [x * 2 for x in numbers] @timeit_decorator(number=3) def for_loop(): result = [] for x in numbers: result.append(x * 2) return result list_1 = list_comprehension() list_2 = for_loop() print(list_1 == list_2)
copy

Använda map()

Funktionen map tillämpar en angiven funktion på varje element i en iterable (t.ex. en lista).

Förutom att vara mer koncis än att skriva loopar, körs den ofta snabbare tack vare C-nivåoptimeringar i dess implementation, vilket minskar overheaden av upprepade funktionsanrop.

Även om map kan ge vissa prestandafördelar, särskilt vid arbete med inbyggda funktioner, är skillnaden i hastighet jämfört med listkomprehensioner ofta försumbar. Båda är mycket optimerade, och för enkla operationer är prestandafördelen med map knappt märkbar. I praktiken bör valet mellan de två baseras mer på läsbarhet och specifika användningsfall, såsom minnes­effektivitet med map.

Låt oss jämföra prestandan för map, for-loopar och listkomprehensioner när vi formaterar 1000000 kundnamn till versal inledningsbokstav (t.ex. 'john doe' -> 'John Doe'):

1234567891011121314151617181920212223242526
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator customer_names = ['john doe', 'jane smith', 'alex johnson', 'ivan smith'] * 250000 @timeit_decorator(number=10) def map_function(): return list(map(str.title, customer_names)) @timeit_decorator(number=10) def list_comprehension(): return [name.title() for name in customer_names] @timeit_decorator(number=10) def for_loop(): result = [] for name in customer_names: result.append(name.title()) return result formatted_with_map = map_function() formatted_with_comprehension = list_comprehension() formatted_with_for_loop = for_loop() print(formatted_with_map == formatted_with_comprehension == formatted_with_for_loop)
copy

Som förväntat är for-loopen det långsammaste tillvägagångssättet av de tre. I detta exempel visade sig map vara snabbare än listkomprehension, även om prestandan i praktiken kan variera beroende på det specifika användningsfallet. Ibland kan listkomprehensioner till och med överträffa map, särskilt för enklare uttryck.

question mark

Vilket av följande påståenden om listkomprehensioner och map() är korrekt?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 1
some-alt