Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Maksimering af Sorteringseffektivitet | Forbedring af Ydeevne med Indbyggede Værktøjer
Optimeringsteknikker i Python

bookMaksimering af Sorteringseffektivitet

Indbyggede sorteringsmetoder

Når du skal sortere en liste, er det næsten altid bedst at anvende en af de to højt optimerede sorteringsværktøjer: funktionen sorted() eller metoden sort(). Begge er implementeret i C og benytter Timsort, en hybridalgoritme der kombinerer mergesort og insertionssort for effektivitet.

sorted() er velegnet til generel sortering, når du skal sortere et hvilket som helst iterabelt objekt uden at ændre de oprindelige data. Omvendt er sort() bedst egnet til lister, hvor ændring af listen direkte er acceptabelt.

sorted_list = sorted(some_list)  # Returns a new sorted list
some_list.sort()  # Sorts the list in place

Begge metoder er effektive, men list.sort() kan være en smule hurtigere for meget store lister, da den undgår at oprette en ny liste. Brug dog sorted() hvis du skal bevare den oprindelige liste uændret.

Delvis sortering med heapq

Hvis du kun har brug for de mindste eller største elementer i et datasæt, er det unødvendigt at sortere hele datasættet. Modulet heapq tilbyder effektive metoder som heapq.nsmallest() og heapq.nlargest() til at udtrække disse elementer uden at sortere hele det itererbare objekt, hvilket gør det hurtigere og mere hukommelseseffektivt.

Her sammenlignes ydeevnen for funktionen sorted() og funktionen heapq.nsmallest() til at hente de 10 mindste tal fra en liste:

1234567891011121314151617181920212223
import heapq import os decorators = os.system('wget https://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 import random # Generate a large list of random integers numbers = [random.randint(1, 1000000) for _ in range(1000000)] @timeit_decorator(number=10) def partial_sort_heapq(): return heapq.nsmallest(10, numbers) @timeit_decorator(number=10) def partial_sort_sorted(): return sorted(numbers)[:10] # Compare performance heapq_result = partial_sort_heapq() sorted_result = partial_sort_sorted() # Ensure both methods give the same result print(heapq_result == sorted_result)
copy

Som du kan se, er heapq.nsmallest() i vores specifikke eksempel cirka 10 gange hurtigere.

Dog, hvis antallet af største eller mindste elementer (n), du ønsker at hente, er tæt på det samlede antal elementer i listen, er heapq ofte langsommere end at bruge funktionen sorted() eller metoden .sort().

For eksempel, lad os nu hente de 100000 mindste elementer fra listen:

1234567891011121314151617181920212223
import heapq import os decorators = os.system('wget https://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 import random # Generate a large list of random integers numbers = [random.randint(1, 1000000) for _ in range(1000000)] @timeit_decorator(number=10) def partial_sort_heapq(): return heapq.nsmallest(100000, numbers) @timeit_decorator(number=10) def partial_sort_sorted(): return sorted(numbers)[:100000] # Compare performance heapq_result = partial_sort_heapq() sorted_result = partial_sort_sorted() # Ensure both methods give the same result print(heapq_result == sorted_result)
copy

Funktionen sorted() overgår tydeligt heapq i dette tilfælde.

1. Du skal sortere en hel liste af tal uden at ændre den oprindelige liste. Hvilken sorteringsfunktion/-metode bør du anvende?

2. Du gennemgår et datasæt med 500.000 salgsregistreringer. For at identificere de 20 transaktioner med højest omsætning, hvilken tilgang er sandsynligvis hurtigst og mest hukommelseseffektiv?

question mark

Du skal sortere en hel liste af tal uden at ændre den oprindelige liste. Hvilken sorteringsfunktion/-metode bør du anvende?

Select the correct answer

question mark

Du gennemgår et datasæt med 500.000 salgsregistreringer. For at identificere de 20 transaktioner med højest omsætning, hvilken tilgang er sandsynligvis hurtigst og mest hukommelseseffektiv?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

Can you explain why heapq is faster for small n but slower for large n?

When should I use heapq over sorted() in practice?

Are there other efficient ways to partially sort data in Python?

Awesome!

Completion rate improved to 7.69

bookMaksimering af Sorteringseffektivitet

Stryg for at vise menuen

Indbyggede sorteringsmetoder

Når du skal sortere en liste, er det næsten altid bedst at anvende en af de to højt optimerede sorteringsværktøjer: funktionen sorted() eller metoden sort(). Begge er implementeret i C og benytter Timsort, en hybridalgoritme der kombinerer mergesort og insertionssort for effektivitet.

sorted() er velegnet til generel sortering, når du skal sortere et hvilket som helst iterabelt objekt uden at ændre de oprindelige data. Omvendt er sort() bedst egnet til lister, hvor ændring af listen direkte er acceptabelt.

sorted_list = sorted(some_list)  # Returns a new sorted list
some_list.sort()  # Sorts the list in place

Begge metoder er effektive, men list.sort() kan være en smule hurtigere for meget store lister, da den undgår at oprette en ny liste. Brug dog sorted() hvis du skal bevare den oprindelige liste uændret.

Delvis sortering med heapq

Hvis du kun har brug for de mindste eller største elementer i et datasæt, er det unødvendigt at sortere hele datasættet. Modulet heapq tilbyder effektive metoder som heapq.nsmallest() og heapq.nlargest() til at udtrække disse elementer uden at sortere hele det itererbare objekt, hvilket gør det hurtigere og mere hukommelseseffektivt.

Her sammenlignes ydeevnen for funktionen sorted() og funktionen heapq.nsmallest() til at hente de 10 mindste tal fra en liste:

1234567891011121314151617181920212223
import heapq import os decorators = os.system('wget https://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 import random # Generate a large list of random integers numbers = [random.randint(1, 1000000) for _ in range(1000000)] @timeit_decorator(number=10) def partial_sort_heapq(): return heapq.nsmallest(10, numbers) @timeit_decorator(number=10) def partial_sort_sorted(): return sorted(numbers)[:10] # Compare performance heapq_result = partial_sort_heapq() sorted_result = partial_sort_sorted() # Ensure both methods give the same result print(heapq_result == sorted_result)
copy

Som du kan se, er heapq.nsmallest() i vores specifikke eksempel cirka 10 gange hurtigere.

Dog, hvis antallet af største eller mindste elementer (n), du ønsker at hente, er tæt på det samlede antal elementer i listen, er heapq ofte langsommere end at bruge funktionen sorted() eller metoden .sort().

For eksempel, lad os nu hente de 100000 mindste elementer fra listen:

1234567891011121314151617181920212223
import heapq import os decorators = os.system('wget https://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 import random # Generate a large list of random integers numbers = [random.randint(1, 1000000) for _ in range(1000000)] @timeit_decorator(number=10) def partial_sort_heapq(): return heapq.nsmallest(100000, numbers) @timeit_decorator(number=10) def partial_sort_sorted(): return sorted(numbers)[:100000] # Compare performance heapq_result = partial_sort_heapq() sorted_result = partial_sort_sorted() # Ensure both methods give the same result print(heapq_result == sorted_result)
copy

Funktionen sorted() overgår tydeligt heapq i dette tilfælde.

1. Du skal sortere en hel liste af tal uden at ændre den oprindelige liste. Hvilken sorteringsfunktion/-metode bør du anvende?

2. Du gennemgår et datasæt med 500.000 salgsregistreringer. For at identificere de 20 transaktioner med højest omsætning, hvilken tilgang er sandsynligvis hurtigst og mest hukommelseseffektiv?

question mark

Du skal sortere en hel liste af tal uden at ændre den oprindelige liste. Hvilken sorteringsfunktion/-metode bør du anvende?

Select the correct answer

question mark

Du gennemgår et datasæt med 500.000 salgsregistreringer. For at identificere de 20 transaktioner med højest omsætning, hvilken tilgang er sandsynligvis hurtigst og mest hukommelseseffektiv?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 3
some-alt