Utnyttja 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:
123456789101112131415161718192021import 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)
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 minneseffektivitet 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'):
1234567891011121314151617181920212223242526import 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)
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.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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
Utnyttja 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:
123456789101112131415161718192021import 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)
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 minneseffektivitet 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'):
1234567891011121314151617181920212223242526import 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)
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.
Tack för dina kommentarer!